diff --git a/abi-bindings/go/validator-manager/ACP99Manager/ACP99Manager.go b/abi-bindings/go/validator-manager/ACP99Manager/ACP99Manager.go new file mode 100644 index 000000000..47d72abe8 --- /dev/null +++ b/abi-bindings/go/validator-manager/ACP99Manager/ACP99Manager.go @@ -0,0 +1,1424 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package acp99manager + +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 +) + +// 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 +} + +// Validator is an auto generated low-level Go binding around an user-defined struct. +type Validator struct { + Status uint8 + NodeID []byte + StartingWeight uint64 + SentNonce uint64 + ReceivedNonce uint64 + Weight uint64 + StartTime uint64 + EndTime uint64 +} + +// ACP99ManagerMetaData contains all meta data concerning the ACP99Manager contract. +var ACP99ManagerMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"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\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"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\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"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\":\"validator\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"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\":\"messsageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", +} + +// ACP99ManagerABI is the input ABI used to generate the binding from. +// Deprecated: Use ACP99ManagerMetaData.ABI instead. +var ACP99ManagerABI = ACP99ManagerMetaData.ABI + +// ACP99Manager is an auto generated Go binding around an Ethereum contract. +type ACP99Manager struct { + ACP99ManagerCaller // Read-only binding to the contract + ACP99ManagerTransactor // Write-only binding to the contract + ACP99ManagerFilterer // Log filterer for contract events +} + +// ACP99ManagerCaller is an auto generated read-only Go binding around an Ethereum contract. +type ACP99ManagerCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ACP99ManagerTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ACP99ManagerTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ACP99ManagerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ACP99ManagerFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ACP99ManagerSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ACP99ManagerSession struct { + Contract *ACP99Manager // 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 +} + +// ACP99ManagerCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ACP99ManagerCallerSession struct { + Contract *ACP99ManagerCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ACP99ManagerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ACP99ManagerTransactorSession struct { + Contract *ACP99ManagerTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ACP99ManagerRaw is an auto generated low-level Go binding around an Ethereum contract. +type ACP99ManagerRaw struct { + Contract *ACP99Manager // Generic contract binding to access the raw methods on +} + +// ACP99ManagerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ACP99ManagerCallerRaw struct { + Contract *ACP99ManagerCaller // Generic read-only contract binding to access the raw methods on +} + +// ACP99ManagerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ACP99ManagerTransactorRaw struct { + Contract *ACP99ManagerTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewACP99Manager creates a new instance of ACP99Manager, bound to a specific deployed contract. +func NewACP99Manager(address common.Address, backend bind.ContractBackend) (*ACP99Manager, error) { + contract, err := bindACP99Manager(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ACP99Manager{ACP99ManagerCaller: ACP99ManagerCaller{contract: contract}, ACP99ManagerTransactor: ACP99ManagerTransactor{contract: contract}, ACP99ManagerFilterer: ACP99ManagerFilterer{contract: contract}}, nil +} + +// NewACP99ManagerCaller creates a new read-only instance of ACP99Manager, bound to a specific deployed contract. +func NewACP99ManagerCaller(address common.Address, caller bind.ContractCaller) (*ACP99ManagerCaller, error) { + contract, err := bindACP99Manager(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ACP99ManagerCaller{contract: contract}, nil +} + +// NewACP99ManagerTransactor creates a new write-only instance of ACP99Manager, bound to a specific deployed contract. +func NewACP99ManagerTransactor(address common.Address, transactor bind.ContractTransactor) (*ACP99ManagerTransactor, error) { + contract, err := bindACP99Manager(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ACP99ManagerTransactor{contract: contract}, nil +} + +// NewACP99ManagerFilterer creates a new log filterer instance of ACP99Manager, bound to a specific deployed contract. +func NewACP99ManagerFilterer(address common.Address, filterer bind.ContractFilterer) (*ACP99ManagerFilterer, error) { + contract, err := bindACP99Manager(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ACP99ManagerFilterer{contract: contract}, nil +} + +// bindACP99Manager binds a generic wrapper to an already deployed contract. +func bindACP99Manager(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ACP99ManagerMetaData.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 (_ACP99Manager *ACP99ManagerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ACP99Manager.Contract.ACP99ManagerCaller.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 (_ACP99Manager *ACP99ManagerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ACP99Manager.Contract.ACP99ManagerTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ACP99Manager *ACP99ManagerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ACP99Manager.Contract.ACP99ManagerTransactor.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 (_ACP99Manager *ACP99ManagerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ACP99Manager.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 (_ACP99Manager *ACP99ManagerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ACP99Manager.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ACP99Manager *ACP99ManagerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ACP99Manager.Contract.contract.Transact(opts, method, params...) +} + +// GetValidator is a free data retrieval call binding the contract method 0xd5f20ff6. +// +// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64,uint64) validator) +func (_ACP99Manager *ACP99ManagerCaller) GetValidator(opts *bind.CallOpts, validationID [32]byte) (Validator, error) { + var out []interface{} + err := _ACP99Manager.contract.Call(opts, &out, "getValidator", validationID) + + if err != nil { + return *new(Validator), err + } + + out0 := *abi.ConvertType(out[0], new(Validator)).(*Validator) + + return out0, err + +} + +// GetValidator is a free data retrieval call binding the contract method 0xd5f20ff6. +// +// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64,uint64) validator) +func (_ACP99Manager *ACP99ManagerSession) GetValidator(validationID [32]byte) (Validator, error) { + return _ACP99Manager.Contract.GetValidator(&_ACP99Manager.CallOpts, validationID) +} + +// GetValidator is a free data retrieval call binding the contract method 0xd5f20ff6. +// +// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64,uint64) validator) +func (_ACP99Manager *ACP99ManagerCallerSession) GetValidator(validationID [32]byte) (Validator, error) { + return _ACP99Manager.Contract.GetValidator(&_ACP99Manager.CallOpts, validationID) +} + +// L1TotalWeight is a free data retrieval call binding the contract method 0xbb0b1938. +// +// Solidity: function l1TotalWeight() view returns(uint64 weight) +func (_ACP99Manager *ACP99ManagerCaller) L1TotalWeight(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _ACP99Manager.contract.Call(opts, &out, "l1TotalWeight") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// L1TotalWeight is a free data retrieval call binding the contract method 0xbb0b1938. +// +// Solidity: function l1TotalWeight() view returns(uint64 weight) +func (_ACP99Manager *ACP99ManagerSession) L1TotalWeight() (uint64, error) { + return _ACP99Manager.Contract.L1TotalWeight(&_ACP99Manager.CallOpts) +} + +// L1TotalWeight is a free data retrieval call binding the contract method 0xbb0b1938. +// +// Solidity: function l1TotalWeight() view returns(uint64 weight) +func (_ACP99Manager *ACP99ManagerCallerSession) L1TotalWeight() (uint64, error) { + return _ACP99Manager.Contract.L1TotalWeight(&_ACP99Manager.CallOpts) +} + +// SubnetID is a free data retrieval call binding the contract method 0x5dc1f535. +// +// Solidity: function subnetID() view returns(bytes32 id) +func (_ACP99Manager *ACP99ManagerCaller) SubnetID(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ACP99Manager.contract.Call(opts, &out, "subnetID") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// SubnetID is a free data retrieval call binding the contract method 0x5dc1f535. +// +// Solidity: function subnetID() view returns(bytes32 id) +func (_ACP99Manager *ACP99ManagerSession) SubnetID() ([32]byte, error) { + return _ACP99Manager.Contract.SubnetID(&_ACP99Manager.CallOpts) +} + +// SubnetID is a free data retrieval call binding the contract method 0x5dc1f535. +// +// Solidity: function subnetID() view returns(bytes32 id) +func (_ACP99Manager *ACP99ManagerCallerSession) SubnetID() ([32]byte, error) { + return _ACP99Manager.Contract.SubnetID(&_ACP99Manager.CallOpts) +} + +// CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. +// +// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns(bytes32 validationID) +func (_ACP99Manager *ACP99ManagerTransactor) CompleteValidatorRegistration(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { + return _ACP99Manager.contract.Transact(opts, "completeValidatorRegistration", messageIndex) +} + +// CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. +// +// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns(bytes32 validationID) +func (_ACP99Manager *ACP99ManagerSession) CompleteValidatorRegistration(messageIndex uint32) (*types.Transaction, error) { + return _ACP99Manager.Contract.CompleteValidatorRegistration(&_ACP99Manager.TransactOpts, messageIndex) +} + +// CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. +// +// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns(bytes32 validationID) +func (_ACP99Manager *ACP99ManagerTransactorSession) CompleteValidatorRegistration(messageIndex uint32) (*types.Transaction, error) { + return _ACP99Manager.Contract.CompleteValidatorRegistration(&_ACP99Manager.TransactOpts, messageIndex) +} + +// CompleteValidatorRemoval is a paid mutator transaction binding the contract method 0x9681d940. +// +// Solidity: function completeValidatorRemoval(uint32 messageIndex) returns(bytes32 validationID) +func (_ACP99Manager *ACP99ManagerTransactor) CompleteValidatorRemoval(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { + return _ACP99Manager.contract.Transact(opts, "completeValidatorRemoval", messageIndex) +} + +// CompleteValidatorRemoval is a paid mutator transaction binding the contract method 0x9681d940. +// +// Solidity: function completeValidatorRemoval(uint32 messageIndex) returns(bytes32 validationID) +func (_ACP99Manager *ACP99ManagerSession) CompleteValidatorRemoval(messageIndex uint32) (*types.Transaction, error) { + return _ACP99Manager.Contract.CompleteValidatorRemoval(&_ACP99Manager.TransactOpts, messageIndex) +} + +// CompleteValidatorRemoval is a paid mutator transaction binding the contract method 0x9681d940. +// +// Solidity: function completeValidatorRemoval(uint32 messageIndex) returns(bytes32 validationID) +func (_ACP99Manager *ACP99ManagerTransactorSession) CompleteValidatorRemoval(messageIndex uint32) (*types.Transaction, error) { + return _ACP99Manager.Contract.CompleteValidatorRemoval(&_ACP99Manager.TransactOpts, messageIndex) +} + +// CompleteValidatorWeightUpdate is a paid mutator transaction binding the contract method 0xce161f14. +// +// Solidity: function completeValidatorWeightUpdate(uint32 messageIndex) returns(bytes32 validationID, uint64 nonce) +func (_ACP99Manager *ACP99ManagerTransactor) CompleteValidatorWeightUpdate(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { + return _ACP99Manager.contract.Transact(opts, "completeValidatorWeightUpdate", messageIndex) +} + +// CompleteValidatorWeightUpdate is a paid mutator transaction binding the contract method 0xce161f14. +// +// Solidity: function completeValidatorWeightUpdate(uint32 messageIndex) returns(bytes32 validationID, uint64 nonce) +func (_ACP99Manager *ACP99ManagerSession) CompleteValidatorWeightUpdate(messageIndex uint32) (*types.Transaction, error) { + return _ACP99Manager.Contract.CompleteValidatorWeightUpdate(&_ACP99Manager.TransactOpts, messageIndex) +} + +// CompleteValidatorWeightUpdate is a paid mutator transaction binding the contract method 0xce161f14. +// +// Solidity: function completeValidatorWeightUpdate(uint32 messageIndex) returns(bytes32 validationID, uint64 nonce) +func (_ACP99Manager *ACP99ManagerTransactorSession) CompleteValidatorWeightUpdate(messageIndex uint32) (*types.Transaction, error) { + return _ACP99Manager.Contract.CompleteValidatorWeightUpdate(&_ACP99Manager.TransactOpts, messageIndex) +} + +// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. +// +// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messsageIndex) returns() +func (_ACP99Manager *ACP99ManagerTransactor) InitializeValidatorSet(opts *bind.TransactOpts, conversionData ConversionData, messsageIndex uint32) (*types.Transaction, error) { + return _ACP99Manager.contract.Transact(opts, "initializeValidatorSet", conversionData, messsageIndex) +} + +// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. +// +// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messsageIndex) returns() +func (_ACP99Manager *ACP99ManagerSession) InitializeValidatorSet(conversionData ConversionData, messsageIndex uint32) (*types.Transaction, error) { + return _ACP99Manager.Contract.InitializeValidatorSet(&_ACP99Manager.TransactOpts, conversionData, messsageIndex) +} + +// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. +// +// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messsageIndex) returns() +func (_ACP99Manager *ACP99ManagerTransactorSession) InitializeValidatorSet(conversionData ConversionData, messsageIndex uint32) (*types.Transaction, error) { + return _ACP99Manager.Contract.InitializeValidatorSet(&_ACP99Manager.TransactOpts, conversionData, messsageIndex) +} + +// ACP99ManagerCompletedValidatorRegistrationIterator is returned from FilterCompletedValidatorRegistration and is used to iterate over the raw logs and unpacked data for CompletedValidatorRegistration events raised by the ACP99Manager contract. +type ACP99ManagerCompletedValidatorRegistrationIterator struct { + Event *ACP99ManagerCompletedValidatorRegistration // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ACP99ManagerCompletedValidatorRegistrationIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ACP99ManagerCompletedValidatorRegistration) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ACP99ManagerCompletedValidatorRegistration) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ACP99ManagerCompletedValidatorRegistrationIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ACP99ManagerCompletedValidatorRegistrationIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ACP99ManagerCompletedValidatorRegistration represents a CompletedValidatorRegistration event raised by the ACP99Manager contract. +type ACP99ManagerCompletedValidatorRegistration struct { + ValidationID [32]byte + Weight uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCompletedValidatorRegistration is a free log retrieval operation binding the contract event 0x967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06. +// +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) FilterCompletedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte) (*ACP99ManagerCompletedValidatorRegistrationIterator, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _ACP99Manager.contract.FilterLogs(opts, "CompletedValidatorRegistration", validationIDRule) + if err != nil { + return nil, err + } + return &ACP99ManagerCompletedValidatorRegistrationIterator{contract: _ACP99Manager.contract, event: "CompletedValidatorRegistration", logs: logs, sub: sub}, nil +} + +// WatchCompletedValidatorRegistration is a free log subscription operation binding the contract event 0x967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06. +// +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) WatchCompletedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *ACP99ManagerCompletedValidatorRegistration, validationID [][32]byte) (event.Subscription, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _ACP99Manager.contract.WatchLogs(opts, "CompletedValidatorRegistration", validationIDRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ACP99ManagerCompletedValidatorRegistration) + if err := _ACP99Manager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseCompletedValidatorRegistration is a log parse operation binding the contract event 0x967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06. +// +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) ParseCompletedValidatorRegistration(log types.Log) (*ACP99ManagerCompletedValidatorRegistration, error) { + event := new(ACP99ManagerCompletedValidatorRegistration) + if err := _ACP99Manager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ACP99ManagerCompletedValidatorRemovalIterator is returned from FilterCompletedValidatorRemoval and is used to iterate over the raw logs and unpacked data for CompletedValidatorRemoval events raised by the ACP99Manager contract. +type ACP99ManagerCompletedValidatorRemovalIterator struct { + Event *ACP99ManagerCompletedValidatorRemoval // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ACP99ManagerCompletedValidatorRemovalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ACP99ManagerCompletedValidatorRemoval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ACP99ManagerCompletedValidatorRemoval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ACP99ManagerCompletedValidatorRemovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ACP99ManagerCompletedValidatorRemovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ACP99ManagerCompletedValidatorRemoval represents a CompletedValidatorRemoval event raised by the ACP99Manager contract. +type ACP99ManagerCompletedValidatorRemoval struct { + ValidationID [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCompletedValidatorRemoval is a free log retrieval operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. +// +// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) +func (_ACP99Manager *ACP99ManagerFilterer) FilterCompletedValidatorRemoval(opts *bind.FilterOpts, validationID [][32]byte) (*ACP99ManagerCompletedValidatorRemovalIterator, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _ACP99Manager.contract.FilterLogs(opts, "CompletedValidatorRemoval", validationIDRule) + if err != nil { + return nil, err + } + return &ACP99ManagerCompletedValidatorRemovalIterator{contract: _ACP99Manager.contract, event: "CompletedValidatorRemoval", logs: logs, sub: sub}, nil +} + +// WatchCompletedValidatorRemoval is a free log subscription operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. +// +// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) +func (_ACP99Manager *ACP99ManagerFilterer) WatchCompletedValidatorRemoval(opts *bind.WatchOpts, sink chan<- *ACP99ManagerCompletedValidatorRemoval, validationID [][32]byte) (event.Subscription, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _ACP99Manager.contract.WatchLogs(opts, "CompletedValidatorRemoval", validationIDRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ACP99ManagerCompletedValidatorRemoval) + if err := _ACP99Manager.contract.UnpackLog(event, "CompletedValidatorRemoval", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseCompletedValidatorRemoval is a log parse operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. +// +// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) +func (_ACP99Manager *ACP99ManagerFilterer) ParseCompletedValidatorRemoval(log types.Log) (*ACP99ManagerCompletedValidatorRemoval, error) { + event := new(ACP99ManagerCompletedValidatorRemoval) + if err := _ACP99Manager.contract.UnpackLog(event, "CompletedValidatorRemoval", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ACP99ManagerCompletedValidatorWeightUpdateIterator is returned from FilterCompletedValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for CompletedValidatorWeightUpdate events raised by the ACP99Manager contract. +type ACP99ManagerCompletedValidatorWeightUpdateIterator struct { + Event *ACP99ManagerCompletedValidatorWeightUpdate // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ACP99ManagerCompletedValidatorWeightUpdateIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ACP99ManagerCompletedValidatorWeightUpdate) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ACP99ManagerCompletedValidatorWeightUpdate) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ACP99ManagerCompletedValidatorWeightUpdateIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ACP99ManagerCompletedValidatorWeightUpdateIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ACP99ManagerCompletedValidatorWeightUpdate represents a CompletedValidatorWeightUpdate event raised by the ACP99Manager contract. +type ACP99ManagerCompletedValidatorWeightUpdate struct { + ValidationID [32]byte + Nonce uint64 + Weight uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCompletedValidatorWeightUpdate is a free log retrieval operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. +// +// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) FilterCompletedValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte) (*ACP99ManagerCompletedValidatorWeightUpdateIterator, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _ACP99Manager.contract.FilterLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) + if err != nil { + return nil, err + } + return &ACP99ManagerCompletedValidatorWeightUpdateIterator{contract: _ACP99Manager.contract, event: "CompletedValidatorWeightUpdate", logs: logs, sub: sub}, nil +} + +// WatchCompletedValidatorWeightUpdate is a free log subscription operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. +// +// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) WatchCompletedValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *ACP99ManagerCompletedValidatorWeightUpdate, validationID [][32]byte) (event.Subscription, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _ACP99Manager.contract.WatchLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ACP99ManagerCompletedValidatorWeightUpdate) + if err := _ACP99Manager.contract.UnpackLog(event, "CompletedValidatorWeightUpdate", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseCompletedValidatorWeightUpdate is a log parse operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. +// +// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) ParseCompletedValidatorWeightUpdate(log types.Log) (*ACP99ManagerCompletedValidatorWeightUpdate, error) { + event := new(ACP99ManagerCompletedValidatorWeightUpdate) + if err := _ACP99Manager.contract.UnpackLog(event, "CompletedValidatorWeightUpdate", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ACP99ManagerInitiatedValidatorRegistrationIterator is returned from FilterInitiatedValidatorRegistration and is used to iterate over the raw logs and unpacked data for InitiatedValidatorRegistration events raised by the ACP99Manager contract. +type ACP99ManagerInitiatedValidatorRegistrationIterator struct { + Event *ACP99ManagerInitiatedValidatorRegistration // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ACP99ManagerInitiatedValidatorRegistrationIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ACP99ManagerInitiatedValidatorRegistration) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ACP99ManagerInitiatedValidatorRegistration) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ACP99ManagerInitiatedValidatorRegistrationIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ACP99ManagerInitiatedValidatorRegistrationIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ACP99ManagerInitiatedValidatorRegistration represents a InitiatedValidatorRegistration event raised by the ACP99Manager contract. +type ACP99ManagerInitiatedValidatorRegistration struct { + ValidationID [32]byte + NodeID [20]byte + RegistrationMessageID [32]byte + RegistrationExpiry uint64 + Weight uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitiatedValidatorRegistration is a free log retrieval operation binding the contract event 0x5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d. +// +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes20 indexed nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) FilterInitiatedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte, nodeID [][20]byte) (*ACP99ManagerInitiatedValidatorRegistrationIterator, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) + } + + logs, sub, err := _ACP99Manager.contract.FilterLogs(opts, "InitiatedValidatorRegistration", validationIDRule, nodeIDRule) + if err != nil { + return nil, err + } + return &ACP99ManagerInitiatedValidatorRegistrationIterator{contract: _ACP99Manager.contract, event: "InitiatedValidatorRegistration", logs: logs, sub: sub}, nil +} + +// WatchInitiatedValidatorRegistration is a free log subscription operation binding the contract event 0x5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d. +// +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes20 indexed nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) WatchInitiatedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *ACP99ManagerInitiatedValidatorRegistration, validationID [][32]byte, nodeID [][20]byte) (event.Subscription, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) + } + + logs, sub, err := _ACP99Manager.contract.WatchLogs(opts, "InitiatedValidatorRegistration", validationIDRule, nodeIDRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ACP99ManagerInitiatedValidatorRegistration) + if err := _ACP99Manager.contract.UnpackLog(event, "InitiatedValidatorRegistration", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitiatedValidatorRegistration is a log parse operation binding the contract event 0x5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d. +// +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes20 indexed nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) ParseInitiatedValidatorRegistration(log types.Log) (*ACP99ManagerInitiatedValidatorRegistration, error) { + event := new(ACP99ManagerInitiatedValidatorRegistration) + if err := _ACP99Manager.contract.UnpackLog(event, "InitiatedValidatorRegistration", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ACP99ManagerInitiatedValidatorRemovalIterator is returned from FilterInitiatedValidatorRemoval and is used to iterate over the raw logs and unpacked data for InitiatedValidatorRemoval events raised by the ACP99Manager contract. +type ACP99ManagerInitiatedValidatorRemovalIterator struct { + Event *ACP99ManagerInitiatedValidatorRemoval // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ACP99ManagerInitiatedValidatorRemovalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ACP99ManagerInitiatedValidatorRemoval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ACP99ManagerInitiatedValidatorRemoval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ACP99ManagerInitiatedValidatorRemovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ACP99ManagerInitiatedValidatorRemovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ACP99ManagerInitiatedValidatorRemoval represents a InitiatedValidatorRemoval event raised by the ACP99Manager contract. +type ACP99ManagerInitiatedValidatorRemoval struct { + ValidationID [32]byte + ValidatorWeightMessageID [32]byte + Weight uint64 + EndTime uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitiatedValidatorRemoval is a free log retrieval operation binding the contract event 0xbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273. +// +// Solidity: event InitiatedValidatorRemoval(bytes32 indexed validationID, bytes32 validatorWeightMessageID, uint64 weight, uint64 endTime) +func (_ACP99Manager *ACP99ManagerFilterer) FilterInitiatedValidatorRemoval(opts *bind.FilterOpts, validationID [][32]byte) (*ACP99ManagerInitiatedValidatorRemovalIterator, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _ACP99Manager.contract.FilterLogs(opts, "InitiatedValidatorRemoval", validationIDRule) + if err != nil { + return nil, err + } + return &ACP99ManagerInitiatedValidatorRemovalIterator{contract: _ACP99Manager.contract, event: "InitiatedValidatorRemoval", logs: logs, sub: sub}, nil +} + +// WatchInitiatedValidatorRemoval is a free log subscription operation binding the contract event 0xbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273. +// +// Solidity: event InitiatedValidatorRemoval(bytes32 indexed validationID, bytes32 validatorWeightMessageID, uint64 weight, uint64 endTime) +func (_ACP99Manager *ACP99ManagerFilterer) WatchInitiatedValidatorRemoval(opts *bind.WatchOpts, sink chan<- *ACP99ManagerInitiatedValidatorRemoval, validationID [][32]byte) (event.Subscription, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _ACP99Manager.contract.WatchLogs(opts, "InitiatedValidatorRemoval", validationIDRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ACP99ManagerInitiatedValidatorRemoval) + if err := _ACP99Manager.contract.UnpackLog(event, "InitiatedValidatorRemoval", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitiatedValidatorRemoval is a log parse operation binding the contract event 0xbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273. +// +// Solidity: event InitiatedValidatorRemoval(bytes32 indexed validationID, bytes32 validatorWeightMessageID, uint64 weight, uint64 endTime) +func (_ACP99Manager *ACP99ManagerFilterer) ParseInitiatedValidatorRemoval(log types.Log) (*ACP99ManagerInitiatedValidatorRemoval, error) { + event := new(ACP99ManagerInitiatedValidatorRemoval) + if err := _ACP99Manager.contract.UnpackLog(event, "InitiatedValidatorRemoval", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ACP99ManagerInitiatedValidatorWeightUpdateIterator is returned from FilterInitiatedValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for InitiatedValidatorWeightUpdate events raised by the ACP99Manager contract. +type ACP99ManagerInitiatedValidatorWeightUpdateIterator struct { + Event *ACP99ManagerInitiatedValidatorWeightUpdate // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ACP99ManagerInitiatedValidatorWeightUpdateIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ACP99ManagerInitiatedValidatorWeightUpdate) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ACP99ManagerInitiatedValidatorWeightUpdate) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ACP99ManagerInitiatedValidatorWeightUpdateIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ACP99ManagerInitiatedValidatorWeightUpdateIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ACP99ManagerInitiatedValidatorWeightUpdate represents a InitiatedValidatorWeightUpdate event raised by the ACP99Manager contract. +type ACP99ManagerInitiatedValidatorWeightUpdate struct { + ValidationID [32]byte + Nonce uint64 + WeightUpdateMessageID [32]byte + Weight uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitiatedValidatorWeightUpdate is a free log retrieval operation binding the contract event 0x6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d3. +// +// Solidity: event InitiatedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, bytes32 weightUpdateMessageID, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) FilterInitiatedValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte) (*ACP99ManagerInitiatedValidatorWeightUpdateIterator, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _ACP99Manager.contract.FilterLogs(opts, "InitiatedValidatorWeightUpdate", validationIDRule) + if err != nil { + return nil, err + } + return &ACP99ManagerInitiatedValidatorWeightUpdateIterator{contract: _ACP99Manager.contract, event: "InitiatedValidatorWeightUpdate", logs: logs, sub: sub}, nil +} + +// WatchInitiatedValidatorWeightUpdate is a free log subscription operation binding the contract event 0x6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d3. +// +// Solidity: event InitiatedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, bytes32 weightUpdateMessageID, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) WatchInitiatedValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *ACP99ManagerInitiatedValidatorWeightUpdate, validationID [][32]byte) (event.Subscription, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _ACP99Manager.contract.WatchLogs(opts, "InitiatedValidatorWeightUpdate", validationIDRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ACP99ManagerInitiatedValidatorWeightUpdate) + if err := _ACP99Manager.contract.UnpackLog(event, "InitiatedValidatorWeightUpdate", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitiatedValidatorWeightUpdate is a log parse operation binding the contract event 0x6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d3. +// +// Solidity: event InitiatedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, bytes32 weightUpdateMessageID, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) ParseInitiatedValidatorWeightUpdate(log types.Log) (*ACP99ManagerInitiatedValidatorWeightUpdate, error) { + event := new(ACP99ManagerInitiatedValidatorWeightUpdate) + if err := _ACP99Manager.contract.UnpackLog(event, "InitiatedValidatorWeightUpdate", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ACP99ManagerRegisteredInitialValidatorIterator is returned from FilterRegisteredInitialValidator and is used to iterate over the raw logs and unpacked data for RegisteredInitialValidator events raised by the ACP99Manager contract. +type ACP99ManagerRegisteredInitialValidatorIterator struct { + Event *ACP99ManagerRegisteredInitialValidator // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ACP99ManagerRegisteredInitialValidatorIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ACP99ManagerRegisteredInitialValidator) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ACP99ManagerRegisteredInitialValidator) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ACP99ManagerRegisteredInitialValidatorIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ACP99ManagerRegisteredInitialValidatorIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ACP99ManagerRegisteredInitialValidator represents a RegisteredInitialValidator event raised by the ACP99Manager contract. +type ACP99ManagerRegisteredInitialValidator struct { + ValidationID [32]byte + NodeID [20]byte + Weight uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRegisteredInitialValidator is a free log retrieval operation binding the contract event 0x9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d7. +// +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) FilterRegisteredInitialValidator(opts *bind.FilterOpts, validationID [][32]byte, nodeID [][20]byte) (*ACP99ManagerRegisteredInitialValidatorIterator, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) + } + + logs, sub, err := _ACP99Manager.contract.FilterLogs(opts, "RegisteredInitialValidator", validationIDRule, nodeIDRule) + if err != nil { + return nil, err + } + return &ACP99ManagerRegisteredInitialValidatorIterator{contract: _ACP99Manager.contract, event: "RegisteredInitialValidator", logs: logs, sub: sub}, nil +} + +// WatchRegisteredInitialValidator is a free log subscription operation binding the contract event 0x9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d7. +// +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) WatchRegisteredInitialValidator(opts *bind.WatchOpts, sink chan<- *ACP99ManagerRegisteredInitialValidator, validationID [][32]byte, nodeID [][20]byte) (event.Subscription, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) + } + + logs, sub, err := _ACP99Manager.contract.WatchLogs(opts, "RegisteredInitialValidator", validationIDRule, nodeIDRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ACP99ManagerRegisteredInitialValidator) + if err := _ACP99Manager.contract.UnpackLog(event, "RegisteredInitialValidator", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRegisteredInitialValidator is a log parse operation binding the contract event 0x9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d7. +// +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) ParseRegisteredInitialValidator(log types.Log) (*ACP99ManagerRegisteredInitialValidator, error) { + event := new(ACP99ManagerRegisteredInitialValidator) + if err := _ACP99Manager.contract.UnpackLog(event, "RegisteredInitialValidator", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index e402c6b1e..f2b7b2100 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -68,10 +68,11 @@ type Validator struct { Status uint8 NodeID []byte StartingWeight uint64 - MessageNonce uint64 + SentNonce uint64 + ReceivedNonce uint64 Weight uint64 - StartedAt uint64 - EndedAt uint64 + StartTime uint64 + EndTime uint64 } // ValidatorManagerSettings is an auto generated low-level Go binding around an user-defined struct. @@ -103,8 +104,8 @@ 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\":\"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\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InitialValidatorCreated\",\"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\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"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\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"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\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"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\":[{\"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\":[{\"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: "0x608060405234801561000f575f80fd5b50604051615f68380380615f6883398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615e1b8061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061023f575f3560e01c806380dd672f11610135578063b771b3bc116100b4578063d5f20ff611610079578063d5f20ff61461051c578063df93d8de1461053c578063e4a63c4014610546578063fb8b11dd1461055a578063fd7ac5e71461056d575f80fd5b8063b771b3bc146104cc578063ba3a4b97146104da578063bc5fbfec146104ed578063bee0a03f14610501578063c974d1b614610514575f80fd5b80639e1bc4ef116100fa5780639e1bc4ef1461046c5780639e478eea1461047f578063a3a65e4814610492578063a9778a7a146102ee578063afb98096146104a5575f80fd5b806380dd672f146104185780638280a25a1461042b5780638ef34c981461043357806393e24598146104465780639ae0644714610459575f80fd5b8063467ef06f116101c1578063620658561161018657806362065856146103a7578063732214f8146103ba57806376f78621146103c1578063785e9e86146103d45780637d8d2f7714610405575f80fd5b8063467ef06f146103305780634bee0040146103435780635dd6a6cb1461036457806360305d621461037757806360ad778414610394575f80fd5b806325e1c7761161020757806325e1c776146102b05780632e2194d8146102c357806335455ded146102ee57806337b9be8f1461030a5780633a1cfff61461031d575f80fd5b80630118acc4146102435780630322ed9814610258578063151d30d11461026b5780631ec447241461028a57806320d91b7a1461029d575b5f80fd5b610256610251366004614d07565b610580565b005b610256610266366004614d42565b610591565b610273600a81565b60405160ff90911681526020015b60405180910390f35b610256610298366004614d07565b610821565b6102566102ab366004614d59565b61082d565b6102566102be366004614da7565b610dcc565b6102d66102d1366004614d42565b610e40565b6040516001600160401b039091168152602001610281565b6102f761271081565b60405161ffff9091168152602001610281565b610256610318366004614ddc565b610e94565b61025661032b366004614d07565b610ea7565b61025661033e366004614e2a565b610eb3565b610356610351366004614e68565b610f85565b604051908152602001610281565b610256610372366004614ddc565b610fba565b61037f601481565b60405163ffffffff9091168152602001610281565b6102566103a2366004614da7565b610fc6565b6103566103b5366004614ecf565b61128e565b6103565f81565b6102566103cf366004614d07565b6112ae565b5f80516020615d66833981519152546001600160a01b03165b6040516001600160a01b039091168152602001610281565b610256610413366004614ddc565b6112ba565b610256610426366004614da7565b6112c6565b610273603081565b610256610441366004614eea565b611500565b610256610454366004614d42565b6115b1565b610256610467366004614ddc565b611645565b61035661047a366004614f18565b611651565b61025661048d366004614f38565b61167d565b6102566104a0366004614e2a565b61175c565b6103567f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6103ed6005600160991b0181565b6102566104e8366004614d42565b611952565b6103565f80516020615d8683398151915281565b61025661050f366004614d42565b611bab565b610273601481565b61052f61052a366004614d42565b611ce7565b6040516102819190614fe0565b6102d66202a30081565b6103565f80516020615d6683398151915281565b610256610568366004614eea565b611e36565b61035661057b366004615060565b611ecd565b61058c8383835f611f28565b505050565b5f8181525f80516020615da68339815191526020526040808220815160e0810190925280545f80516020615d8683398151915293929190829060ff1660058111156105de576105de614f6b565b60058111156105ef576105ef614f6b565b8152602001600182018054610603906150cb565b80601f016020809104026020016040519081016040528092919081815260200182805461062f906150cb565b801561067a5780601f106106515761010080835404028352916020019161067a565b820191905f5260205f20905b81548152906001019060200180831161065d57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156106e5576106e5614f6b565b14610721575f8381526005830160205260409081902054905163170cc93360e21b81526107189160ff1690600401615103565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610798573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107bf919081019061520c565b6040518263ffffffff1660e01b81526004016107db919061523d565b6020604051808303815f875af11580156107f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061081b919061524f565b50505050565b61081b8383835f611f54565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f80516020615d868339815191529060ff161561087f57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e6919061524f565b83602001351461090f576040516372b0a7e760e11b815260208401356004820152602401610718565b306109206060850160408601615266565b6001600160a01b0316146109635761093e6060840160408501615266565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610718565b5f6109716060850185615281565b905090505f805b828163ffffffff161015610bc2575f6109946060880188615281565b8363ffffffff168181106109aa576109aa6152c6565b90506020028101906109bc91906152da565b6109c590615345565b80516040519192505f9160068801916109dd916153c0565b90815260200160405180910390205414610a0d57805160405163a41f772f60e01b8152610718919060040161523d565b5f6002885f013584604051602001610a3c92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a56916153c0565b602060405180830381855afa158015610a71573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610a94919061524f565b90508086600601835f0151604051610aac91906153c0565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610aec9082615415565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b039485166001600160c01b031990941693909317600160801b85851602176001600160c01b0316600160c01b429590951694909402939093179092556003909101805467ffffffffffffffff19169055610b6c90856154e4565b9350807fd80a750132c7a4fb67e226bdfecab0d8609bbb4e48cdad62cee218f25b758fff8360400151845f0151604051610ba7929190615504565b60405180910390a2505080610bbb90615525565b9050610978565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c05910460ff1683615547565b6001600160401b03161015610c3857604051633e1a785160e01b81526001600160401b0382166004820152602401610718565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610c5c87612281565b604001516040518263ffffffff1660e01b8152600401610c7c919061523d565b602060405180830381865af4158015610c97573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cbb919061524f565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610cf5919061569d565b5f60405180830381865af4158015610d0f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d36919081019061520c565b90505f600282604051610d4991906153c0565b602060405180830381855afa158015610d64573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d87919061524f565b9050828114610db35760405163baaea89d60e01b81526004810182905260248101849052604401610718565b5050506007909201805460ff1916600117905550505050565b610dd582612397565b610df5576040516330efa98b60e01b815260048101839052602401610718565b5f610dff83611ce7565b5190506002816005811115610e1657610e16614f6b565b14610e36578060405163170cc93360e21b81526004016107189190615103565b61081b83836123c0565b5f80610e4a61265f565b60030154610e589084615731565b9050801580610e6d57506001600160401b0381115b15610e8e5760405163222d164360e21b815260048101849052602401610718565b92915050565b610ea084848484611f54565b5050505050565b61081b8383835f612683565b610ebb6128c0565b5f610ec461265f565b90505f80610ed1846128f7565b91509150610ede82612397565b610eea57505050610f6c565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b03918216911680610f2c5750805b600483516005811115610f4157610f41614f6b565b03610f5057610f508185612caf565b610f6682610f61856040015161128e565b612cd9565b50505050505b610f8260015f80516020615dc683398151915255565b50565b5f610f8e6128c0565b610f9a85858585612d0f565b9050610fb260015f80516020615dc683398151915255565b949350505050565b61081b84848484612e8f565b5f610fcf61265f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561100857611008614f6b565b600381111561101957611019614f6b565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61108f82611ce7565b90506001835160038111156110a6576110a6614f6b565b146110c7578251604051633b0d540d60e21b81526107189190600401615750565b6004815160058111156110dc576110dc614f6b565b036110f2576110ea86612ebb565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61111789612281565b604001516040518263ffffffff1660e01b8152600401611137919061523d565b606060405180830381865af4158015611152573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611176919061576a565b50915091508184146111a357846040015160405163089938b360e11b815260040161071891815260200190565b806001600160401b031683606001516001600160401b031610806111dc5750806001600160401b03168560a001516001600160401b0316115b1561120557604051632e19bc2d60e11b81526001600160401b0382166004820152602401610718565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b1990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f61129761265f565b60030154610e8e906001600160401b0384166157aa565b61058c8383835f612e8f565b610ea084848484612683565b6112ce6128c0565b5f6112d761265f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561131057611310614f6b565b600381111561132157611321614f6b565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152905060038151600381111561139a5761139a614f6b565b146113bb578051604051633b0d540d60e21b81526107189190600401615750565b60046113ca8260400151611ce7565b5160058111156113dc576113dc614f6b565b146114db575f6113eb84612281565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b815260040161142a919061523d565b606060405180830381865af4158015611445573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611469919061576a565b5091509150818460400151146114955760405163089938b360e11b815260048101839052602401610718565b806001600160401b03168460c001516001600160401b031611156114d757604051632e19bc2d60e11b81526001600160401b0382166004820152602401610718565b5050505b6114e484612ebb565b50506114fc60015f80516020615dc683398151915255565b5050565b5f61150961265f565b90506001600160a01b03821661153d5760405163caa903f960e01b81526001600160a01b0383166004820152602401610718565b5f8381526006820160205260409020546001600160a01b0316331461158357335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610718565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6115ba61265f565b90505f6115c683611ce7565b51905060048160058111156115dd576115dd614f6b565b146115fd578060405163170cc93360e21b81526004016107189190615103565b5f8381526006830160205260409020546001600160a01b03163314611622573361155e565b5f83815260068301602052604090205461058c906001600160a01b031684612caf565b61081b84848484611f28565b5f61165a6128c0565b6116658333846130b5565b9050610e8e60015f80516020615dc683398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff16806116c6575080546001600160401b03808416911610155b156116e45760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561170f84846132fa565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80516020615d868339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61178f86612281565b604001516040518263ffffffff1660e01b81526004016117af919061523d565b6040805180830381865af41580156117c9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ed91906157c1565b915091508061181357604051632d07135360e01b81528115156004820152602401610718565b5f8281526004840160205260409020805461182d906150cb565b90505f036118515760405163089938b360e11b815260048101839052602401610718565b60015f838152600580860160205260409091205460ff169081111561187857611878614f6b565b146118ab575f8281526005840160205260409081902054905163170cc93360e21b81526107189160ff1690600401615103565b5f82815260048401602052604081206118c391614c56565b5f828152600584016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917f8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b910160405180910390a250505050565b5f61195b61265f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561199457611994614f6b565b60038111156119a5576119a5614f6b565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611a1e57611a1e614f6b565b14158015611a3f5750600381516003811115611a3c57611a3c614f6b565b14155b15611a60578051604051633b0d540d60e21b81526107189190600401615750565b5f611a6e8260400151611ce7565b905080606001516001600160401b03165f03611aa0576040516339b894f960e21b815260048101859052602401610718565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611b0e93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611b28573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b4f919081019061520c565b6040518263ffffffff1660e01b8152600401611b6b919061523d565b6020604051808303815f875af1158015611b87573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ea0919061524f565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f80516020615d868339815191529190611bf2906150cb565b90505f03611c165760405163089938b360e11b815260048101839052602401610718565b60015f838152600580840160205260409091205460ff1690811115611c3d57611c3d614f6b565b14611c70575f8281526005820160205260409081902054905163170cc93360e21b81526107189160ff1690600401615103565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611ca792016157e4565b6020604051808303815f875af1158015611cc3573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061058c919061524f565b611cef614c8d565b5f8281525f80516020615da6833981519152602052604090819020815160e0810190925280545f80516020615d86833981519152929190829060ff166005811115611d3c57611d3c614f6b565b6005811115611d4d57611d4d614f6b565b8152602001600182018054611d61906150cb565b80601f0160208091040260200160405190810160405280929190818152602001828054611d8d906150cb565b8015611dd85780601f10611daf57610100808354040283529160200191611dd8565b820191905f5260205f20905b815481529060010190602001808311611dbb57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b038116611e685760405163caa903f960e01b81526001600160a01b0382166004820152602401610718565b5f611e7161265f565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611e9f573361155e565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6040515f905f80516020615d86833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0690611f10908690869061586e565b90815260200160405180910390205491505092915050565b611f3484848484611f54565b61081b57604051631036cf9160e11b815260048101859052602401610718565b5f80611f5e61265f565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611f9757611f97614f6b565b6003811115611fa857611fa8614f6b565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61201e82611ce7565b905060028351600381111561203557612035614f6b565b14612056578251604051633b0d540d60e21b81526107189190600401615750565b60208301516001600160a01b031633146120f2575f8281526006850160205260409020546001600160a01b0316331461208f573361155e565b5f82815260068501602052604090205460a08201516120be91600160b01b90046001600160401b0316906154e4565b6001600160401b03164210156120f25760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610718565b60028151600581111561210757612107614f6b565b036122295760028401546080840151612129916001600160401b0316906154e4565b6001600160401b031642101561215d5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610718565b871561216f5761216d82886123c0565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516121a89184916121a3919061587d565b613314565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556121eb84888c6134eb565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610fb29350505050565b60048151600581111561223e5761223e614f6b565b036122655761224e83878b6134eb565b5061225889612ebb565b6001945050505050610fb2565b805160405163170cc93360e21b81526107189190600401615103565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156122e5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261230c919081019061589d565b915091508061232e57604051636b2f19e960e01b815260040160405180910390fd5b815115612354578151604051636ba589a560e01b81526004810191909152602401610718565b60208201516001600160a01b031615612390576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610718565b5092915050565b5f806123a161265f565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa15801561240b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612432919081019061589d565b915091508061245457604051636b2f19e960e01b815260040160405180910390fd5b5f61245d61265f565b600581015484519192501461248b578251604051636ba589a560e01b81526004810191909152602401610718565b60208301516001600160a01b0316156124c7576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610718565b60208301516001600160a01b031615612503576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610718565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b8152600401612540919061523d565b6040805180830381865af415801561255a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061257e919061592d565b915091508188146125a55760405163089938b360e11b815260048101899052602401610718565b5f8881526006840160205260409020600101546001600160401b039081169082161115612636575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612654565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061268d61265f565b90505f612699876136d9565b90506126a487612397565b6126b357600192505050610fb2565b5f8781526006830160205260409020546001600160a01b031633146126d8573361155e565b5f87815260068301602052604090205460a082015161270791600160b01b90046001600160401b0316906154e4565b6001600160401b03168160c001516001600160401b0316101561274e5760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610718565b5f86156127665761275f88876123c0565b9050612784565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906127a99061128e565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612812573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612836919061524f565b90506001600160a01b038616612862575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612881908490615950565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615dc68339815191528054600119016128f157604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612900614c8d565b5f80516020615d868339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61293388612281565b604001516040518263ffffffff1660e01b8152600401612953919061523d565b6040805180830381865af415801561296d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061299191906157c1565b9150915080156129b857604051632d07135360e01b81528115156004820152602401610718565b5f82815260058085016020526040808320815160e08101909252805491929091839160ff909116908111156129ef576129ef614f6b565b6005811115612a0057612a00614f6b565b8152602001600182018054612a14906150cb565b80601f0160208091040260200160405190810160405280929190818152602001828054612a40906150cb565b8015612a8b5780601f10612a6257610100808354040283529160200191612a8b565b820191905f5260205f20905b815481529060010190602001808311612a6e57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612af657612af6614f6b565b14158015612b175750600181516005811115612b1457612b14614f6b565b14155b15612b3857805160405163170cc93360e21b81526107189190600401615103565b600381516005811115612b4d57612b4d614f6b565b03612b5b5760048152612b60565b600581525b836006018160200151604051612b7691906153c0565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff1916906001908490811115612bb957612bb9614f6b565b021790555060208201516001820190612bd29082615415565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612c7857612c78614f6b565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612cb861265f565b5f838152600a820160205260408120805491905590915061081b84826139be565b5f80516020615d66833981519152546114fc906001600160a01b03168383613a34565b60015f80516020615dc683398151915255565b5f80612d1961265f565b600281015490915061ffff600160401b90910481169086161080612d42575061271061ffff8616115b15612d6657604051635f12e6c360e11b815261ffff86166004820152602401610718565b60028101546001600160401b039081169085161015612da2576040516202a06d60e11b81526001600160401b0385166004820152602401610718565b8054831080612db45750806001015483115b15612dd55760405163222d164360e21b815260048101849052602401610718565b5f612ddf84613a93565b90505f612deb82610e40565b90505f612df88983613ab6565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b612e9b84848484612683565b61081b57604051635bff683f60e11b815260048101859052602401610718565b5f612ec461265f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612efd57612efd614f6b565b6003811115612f0e57612f0e614f6b565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612fab7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612fba91906154e4565b6001600160401b0316421015612fee5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610718565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680613049575060208201515b5f80613056838886614004565b9150915061306f8560200151610f61876060015161128e565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f806130bf61265f565b90505f6130ce6102d185613a93565b90505f6130da87611ce7565b90506130e587612397565b613105576040516330efa98b60e01b815260048101889052602401610718565b60028151600581111561311a5761311a614f6b565b1461313b57805160405163170cc93360e21b81526107189190600401615103565b5f82826080015161314c91906154e4565b905083600201600a9054906101000a90046001600160401b031682604001516131759190615547565b6001600160401b0316816001600160401b031611156131b257604051636d51fe0560e11b81526001600160401b0382166004820152602401610718565b5f806131be8a84613314565b915091505f8a836040516020016131ec92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6133026140b1565b61330b826140fc565b6114fc81614176565b5f8281525f80516020615da6833981519152602052604081206002015481905f80516020615d8683398151915290600160801b90046001600160401b031661335c85826141de565b5f61336687614448565b5f888152600585016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561340f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613436919081019061520c565b6040518263ffffffff1660e01b8152600401613452919061523d565b6020604051808303815f875af115801561346e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613492919061524f565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f806134f561265f565b90505f6135058660400151611ce7565b90505f60038251600581111561351d5761351d614f6b565b148061353b575060048251600581111561353957613539614f6b565b145b1561354b575060c0810151613588565b60028251600581111561356057613560614f6b565b0361356c575042613588565b815160405163170cc93360e21b81526107189190600401615103565b86608001516001600160401b0316816001600160401b0316116135b0575f93505050506132f3565b600483015460608801515f916001600160a01b031690634f22429f906135d59061128e565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613656573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061367a919061524f565b90506001600160a01b03871661369257876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b6136e1614c8d565b5f8281525f80516020615da68339815191526020526040808220815160e0810190925280545f80516020615d8683398151915293929190829060ff16600581111561372e5761372e614f6b565b600581111561373f5761373f614f6b565b8152602001600182018054613753906150cb565b80601f016020809104026020016040519081016040528092919081815260200182805461377f906150cb565b80156137ca5780601f106137a1576101008083540402835291602001916137ca565b820191905f5260205f20905b8154815290600101906020018083116137ad57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561383857613838614f6b565b1461386b575f8481526005830160205260409081902054905163170cc93360e21b81526107189160ff1690600401615103565b60038152426001600160401b031660c08201525f84815260058381016020526040909120825181548493839160ff19169060019084908111156138b0576138b0614f6b565b0217905550602082015160018201906138c99082615415565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6139678582613314565b6080840151604080516001600160401b03909216825242602083015291935083925087917ffbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42910160405180910390a3509392505050565b5f5f80516020615d6683398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015613a19575f80fd5b505af1158015613a2b573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261058c91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506144bd565b5f610e8e825f80516020615d66833981519152546001600160a01b03169061451e565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16613afa57604051637fab81e560e01b815260040160405180910390fd5b5f80516020615d8683398151915242613b196060860160408701614ecf565b6001600160401b0316111580613b535750613b376202a30042615950565b613b476060860160408701614ecf565b6001600160401b031610155b15613b8d57613b686060850160408601614ecf565b604051635879da1360e11b81526001600160401b039091166004820152602401610718565b60038101546001600160401b0390613bb090600160401b90048216858316615950565b1115613bda57604051633e1a785160e01b81526001600160401b0384166004820152602401610718565b613bef613bea6060860186615963565b61452a565b613bff613bea6080860186615963565b6030613c0e6020860186615977565b905014613c4057613c226020850185615977565b6040516326475b2f60e11b8152610718925060040190815260200190565b613c4a8480615977565b90505f03613c7757613c5c8480615977565b604051633e08a12560e11b81526004016107189291906159b9565b5f60068201613c868680615977565b604051613c9492919061586e565b90815260200160405180910390205414613ccd57613cb28480615977565b60405163a41f772f60e01b81526004016107189291906159b9565b613cd7835f6141de565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613d148a80615977565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613d5c908b018b615977565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613da560608b0160408c01614ecf565b6001600160401b03168152602001613dc060608b018b615963565b613dc9906159cc565b8152602001613ddb60808b018b615963565b613de4906159cc565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613e129190615af9565b5f60405180830381865af4158015613e2c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613e539190810190615bb0565b5f82815260048601602052604090209193509150613e718282615415565b508160068401613e818880615977565b604051613e8f92919061586e565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613ecb90859060040161523d565b6020604051808303815f875af1158015613ee7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f0b919061524f565b5f8481526005860160205260409020805460ff191660011790559050613f318780615977565b5f858152600587016020526040902060010191613f4f919083615bf3565b505f83815260058501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580837fe093cab27f3fc60439e008f3a2073310d3ac9ac9b7d59e53a06b2588f7498bd688613fd18b80615977565b613fe160608e0160408f01614ecf565b604051613ff19493929190615cac565b60405180910390a3509095945050505050565b5f805f61400f61265f565b5f868152600882016020526040812080549082905591925090819080156140a3575f8781526006850160205260409020546127109061405990600160a01b900461ffff16836157aa565b6140639190615731565b91508184600a015f8981526020019081526020015f205f8282546140879190615950565b9091555061409790508282615ce3565b92506140a389846139be565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166140fa57604051631afcd79f60e31b815260040160405180910390fd5b565b6141046140b1565b61410d81614693565b6141156146ac565b610f826060820135608083013561413260c0850160a08601614ecf565b61414260e0860160c08701615cf6565b614153610100870160e08801615d0f565b61010087013561416b61014089016101208a01615266565b8861014001356146bc565b61417e6140b1565b5f80516020615d668339815191526001600160a01b0382166141be57604051637330680360e01b81526001600160a01b0383166004820152602401610718565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80516020615d868339815191525f6001600160401b0380841690851611156142125761420b838561587d565b905061421f565b61421c848461587d565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b900490921660608201524291158061428c575060018401548151614288916001600160401b031690615950565b8210155b156142b4576001600160401b03808416606083015282825260408201511660208201526142d3565b82816060018181516142c691906154e4565b6001600160401b03169052505b60608101516142e3906064615547565b602082015160018601546001600160401b03929092169161430e9190600160401b900460ff16615547565b6001600160401b0316101561434757606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610718565b858160400181815161435991906154e4565b6001600160401b031690525060408101805186919061437990839061587d565b6001600160401b0316905250600184015460408201516064916143a791600160401b90910460ff1690615547565b6001600160401b031610156143e0576040808201519051633e1a785160e01b81526001600160401b039091166004820152602401610718565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8181525f80516020615da68339815191526020526040812060020180545f80516020615d86833981519152919060089061449290600160401b90046001600160401b0316615d2f565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6144d16001600160a01b038416836148a1565b905080515f141580156144f55750808060200190518101906144f39190615d4a565b155b1561058c57604051635274afe760e01b81526001600160a01b0384166004820152602401610718565b5f6132f38333846148ae565b6145376020820182614e2a565b63ffffffff1615801561455757506145526020820182615281565b151590505b1561459e576145696020820182614e2a565b6145766020830183615281565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610718565b6145ab6020820182615281565b90506145ba6020830183614e2a565b63ffffffff1611156145d3576145696020820182614e2a565b60015b6145e36020830183615281565b90508110156114fc576145f96020830183615281565b614604600184615ce3565b818110614613576146136152c6565b90506020020160208101906146289190615266565b6001600160a01b031661463e6020840184615281565b8381811061464e5761464e6152c6565b90506020020160208101906146639190615266565b6001600160a01b0316101561468b57604051630dbc8d5f60e31b815260040160405180910390fd5b6001016145d6565b61469b6140b1565b6146a3614a11565b610f8281614a19565b6146b46140b1565b6140fa614b01565b6146c46140b1565b5f6146cd61265f565b905061ffff861615806146e5575061271061ffff8716115b1561470957604051635f12e6c360e11b815261ffff87166004820152602401610718565b8789111561472d5760405163222d164360e21b8152600481018a9052602401610718565b60ff851615806147405750600a60ff8616115b156147635760405163170db35960e31b815260ff86166004820152602401610718565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b031610156147ca576040516202a06d60e11b81526001600160401b0388166004820152602401610718565b835f036147ea5760405163a733007160e01b815260040160405180910390fd5b8161480b57604051632f6bd1db60e01b815260048101839052602401610718565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b60606132f383835f614b09565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156148f4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614918919061524f565b905061492f6001600160a01b038616853086614b98565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa158015614973573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614997919061524f565b90508181116149fd5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610718565b614a078282615ce3565b9695505050505050565b6140fa6140b1565b614a216140b1565b80355f80516020615d868339815191529081556014614a466060840160408501615d0f565b60ff161180614a655750614a606060830160408401615d0f565b60ff16155b15614a9957614a7a6060830160408401615d0f565b604051634a59bbff60e11b815260ff9091166004820152602401610718565b614aa96060830160408401615d0f565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614ada6040830160208401614ecf565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612cfc6140b1565b606081471015614b2e5760405163cd78605960e01b8152306004820152602401610718565b5f80856001600160a01b03168486604051614b4991906153c0565b5f6040518083038185875af1925050503d805f8114614b83576040519150601f19603f3d011682016040523d82523d5f602084013e614b88565b606091505b5091509150614a07868383614bd1565b6040516001600160a01b03848116602483015283811660448301526064820183905261081b9186918216906323b872dd90608401613a61565b606082614be657614be182614c2d565b6132f3565b8151158015614bfd57506001600160a01b0384163b155b15614c2657604051639996b31560e01b81526001600160a01b0385166004820152602401610718565b50806132f3565b805115614c3d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c62906150cb565b5f825580601f10614c71575050565b601f0160209004905f5260205f2090810190610f829190614cca565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614cde575f8155600101614ccb565b5090565b8015158114610f82575f80fd5b803563ffffffff81168114614d02575f80fd5b919050565b5f805f60608486031215614d19575f80fd5b833592506020840135614d2b81614ce2565b9150614d3960408501614cef565b90509250925092565b5f60208284031215614d52575f80fd5b5035919050565b5f8060408385031215614d6a575f80fd5b82356001600160401b03811115614d7f575f80fd5b830160808186031215614d90575f80fd5b9150614d9e60208401614cef565b90509250929050565b5f8060408385031215614db8575f80fd5b82359150614d9e60208401614cef565b6001600160a01b0381168114610f82575f80fd5b5f805f8060808587031215614def575f80fd5b843593506020850135614e0181614ce2565b9250614e0f60408601614cef565b91506060850135614e1f81614dc8565b939692955090935050565b5f60208284031215614e3a575f80fd5b6132f382614cef565b803561ffff81168114614d02575f80fd5b6001600160401b0381168114610f82575f80fd5b5f805f8060808587031215614e7b575f80fd5b84356001600160401b03811115614e90575f80fd5b850160a08188031215614ea1575f80fd5b9350614eaf60208601614e43565b92506040850135614ebf81614e54565b9396929550929360600135925050565b5f60208284031215614edf575f80fd5b81356132f381614e54565b5f8060408385031215614efb575f80fd5b823591506020830135614f0d81614dc8565b809150509250929050565b5f8060408385031215614f29575f80fd5b50508035926020909101359150565b5f80828403610180811215614f4b575f80fd5b61016080821215614f5a575f80fd5b8493508301359050614f0d81614dc8565b634e487b7160e01b5f52602160045260245ffd5b60068110614f8f57614f8f614f6b565b9052565b5f5b83811015614fad578181015183820152602001614f95565b50505f910152565b5f8151808452614fcc816020860160208601614f93565b601f01601f19169290920160200192915050565b60208152614ff2602082018351614f7f565b5f602083015160e0604084015261500d610100840182614fb5565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215615071575f80fd5b82356001600160401b0380821115615087575f80fd5b818501915085601f83011261509a575f80fd5b8135818111156150a8575f80fd5b8660208285010111156150b9575f80fd5b60209290920196919550909350505050565b600181811c908216806150df57607f821691505b6020821081036150fd57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610e8e8284614f7f565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561514757615147615111565b60405290565b604080519081016001600160401b038111828210171561514757615147615111565b604051601f8201601f191681016001600160401b038111828210171561519757615197615111565b604052919050565b5f6001600160401b038211156151b7576151b7615111565b50601f01601f191660200190565b5f82601f8301126151d4575f80fd5b81516151e76151e28261519f565b61516f565b8181528460208386010111156151fb575f80fd5b610fb2826020830160208701614f93565b5f6020828403121561521c575f80fd5b81516001600160401b03811115615231575f80fd5b610fb2848285016151c5565b602081525f6132f36020830184614fb5565b5f6020828403121561525f575f80fd5b5051919050565b5f60208284031215615276575f80fd5b81356132f381614dc8565b5f808335601e19843603018112615296575f80fd5b8301803591506001600160401b038211156152af575f80fd5b6020019150600581901b36038213156134e4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126152ee575f80fd5b9190910192915050565b5f82601f830112615307575f80fd5b81356153156151e28261519f565b818152846020838601011115615329575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615355575f80fd5b61535d615125565b82356001600160401b0380821115615373575f80fd5b61537f368387016152f8565b83526020850135915080821115615394575f80fd5b506153a1368286016152f8565b60208301525060408301356153b581614e54565b604082015292915050565b5f82516152ee818460208701614f93565b601f82111561058c57805f5260205f20601f840160051c810160208510156153f65750805b601f840160051c820191505b81811015610ea0575f8155600101615402565b81516001600160401b0381111561542e5761542e615111565b6154428161543c84546150cb565b846153d1565b602080601f831160018114615475575f841561545e5750858301515b5f19600386901b1c1916600185901b1785556110ea565b5f85815260208120601f198616915b828110156154a357888601518255948401946001909101908401615484565b50858210156154c057878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b03818116838216019080821115612390576123906154d0565b6001600160401b0383168152604060208201525f610fb26040830184614fb5565b5f63ffffffff80831681810361553d5761553d6154d0565b6001019392505050565b6001600160401b0381811683821602808216919082811461556a5761556a6154d0565b505092915050565b5f808335601e19843603018112615587575f80fd5b83016020810192503590506001600160401b038111156155a5575f80fd5b8036038213156134e4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561569057848303601f19018952813536889003605e19018112615617575f80fd5b870160606156258280615572565b82875261563583880182846155b3565b9250505061564586830183615572565b868303888801526156578382846155b3565b92505050604080830135925061566c83614e54565b6001600160401b0392909216949091019390935297830197908301906001016155f2565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356156c181614dc8565b6001600160a01b031660608381019190915283013536849003601e190181126156e8575f80fd5b83016020810190356001600160401b03811115615703575f80fd5b8060051b3603821315615714575f80fd5b60808085015261572860a0850182846155db565b95945050505050565b5f8261574b57634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061576457615764614f6b565b91905290565b5f805f6060848603121561577c575f80fd5b83519250602084015161578e81614e54565b604085015190925061579f81614e54565b809150509250925092565b8082028115828204841417610e8e57610e8e6154d0565b5f80604083850312156157d2575f80fd5b825191506020830151614f0d81614ce2565b5f60208083525f84546157f6816150cb565b806020870152604060018084165f8114615817576001811461583357615860565b60ff19851660408a0152604084151560051b8a01019550615860565b895f5260205f205f5b858110156158575781548b820186015290830190880161583c565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b03828116828216039080821115612390576123906154d0565b5f80604083850312156158ae575f80fd5b82516001600160401b03808211156158c4575f80fd5b90840190606082870312156158d7575f80fd5b6158df615125565b8251815260208301516158f181614dc8565b6020820152604083015182811115615907575f80fd5b615913888286016151c5565b6040830152508094505050506020830151614f0d81614ce2565b5f806040838503121561593e575f80fd5b825191506020830151614f0d81614e54565b80820180821115610e8e57610e8e6154d0565b5f8235603e198336030181126152ee575f80fd5b5f808335601e1984360301811261598c575f80fd5b8301803591506001600160401b038211156159a5575f80fd5b6020019150368190038213156134e4575f80fd5b602081525f610fb26020830184866155b3565b5f604082360312156159dc575f80fd5b6159e461514d565b6159ed83614cef565b81526020808401356001600160401b0380821115615a09575f80fd5b9085019036601f830112615a1b575f80fd5b813581811115615a2d57615a2d615111565b8060051b9150615a3e84830161516f565b8181529183018401918481019036841115615a57575f80fd5b938501935b83851015615a815784359250615a7183614dc8565b8282529385019390850190615a5c565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615aee5784516001600160a01b03168252938301936001929092019190830190615ac5565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b1f610100840182614fb5565b90506040840151601f1980858403016060860152615b3d8383614fb5565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b6d8383615a93565b925060a08601519150808584030160c086015250615b8b8282615a93565b91505060c0840151615ba860e08501826001600160401b03169052565b509392505050565b5f8060408385031215615bc1575f80fd5b8251915060208301516001600160401b03811115615bdd575f80fd5b615be9858286016151c5565b9150509250929050565b6001600160401b03831115615c0a57615c0a615111565b615c1e83615c1883546150cb565b836153d1565b5f601f841160018114615c4f575f8515615c385750838201355b5f19600387901b1c1916600186901b178355610ea0565b5f83815260208120601f198716915b82811015615c7e5786850135825560209485019460019092019101615c5e565b5086821015615c9a575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b03808716835260606020840152615ccf6060840186886155b3565b915080841660408401525095945050505050565b81810381811115610e8e57610e8e6154d0565b5f60208284031215615d06575f80fd5b6132f382614e43565b5f60208284031215615d1f575f80fd5b813560ff811681146132f3575f80fd5b5f6001600160401b0380831681810361553d5761553d6154d0565b5f60208284031215615d5a575f80fd5b81516132f381614ce256fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb059b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122091fd9781d213c817aed3e146319d27f6fbf2535f84575753f151f98535f5793564736f6c63430008190033", + 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\"},{\"internalType\":\"bytes32\",\"name\":\"expectedValidationID\",\"type\":\"bytes32\"}],\"name\":\"UnexpectedValidationID\",\"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\":\"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\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"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\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"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\":\"NODE_ID_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"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: "0x608060405234801561000f575f80fd5b50604051615e8e380380615e8e83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615d418061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061026b575f3560e01c80638280a25a1161014b578063ba3a4b97116100bf578063ce161f1411610084578063ce161f141461056b578063d5f20ff61461059b578063df93d8de146105bb578063e4a63c40146105c5578063fb8b11dd146105d9578063fd7ac5e7146105ec575f80fd5b8063ba3a4b971461050e578063bb0b193814610521578063bc5fbfec14610529578063bee0a03f14610550578063c974d1b614610563575f80fd5b80639e1bc4ef116101105780639e1bc4ef146104a05780639e478eea146104b3578063a3a65e48146104c6578063a9778a7a1461031a578063afb98096146104d9578063b771b3bc14610500575f80fd5b80638280a25a1461044c5780638ef34c981461045457806393e24598146104675780639681d9401461047a5780639ae064471461048d575f80fd5b80635dc1f535116101e257806363e2ca97116101a757806363e2ca9714610398578063732214f8146103db57806376f78621146103e2578063785e9e86146103f55780637d8d2f771461042657806380dd672f14610439575f80fd5b80635dc1f5351461037d5780635dd6a6cb1461038557806360305d621461039857806360ad7784146103b557806362065856146103c8575f80fd5b806325e1c7761161023357806325e1c776146102dc5780632e2194d8146102ef57806335455ded1461031a57806337b9be8f146103365780633a1cfff6146103495780634bee00401461035c575f80fd5b80630118acc41461026f5780630322ed9814610284578063151d30d1146102975780631ec44724146102b657806320d91b7a146102c9575b5f80fd5b61028261027d366004614d5b565b6105ff565b005b610282610292366004614d96565b610610565b61029f600a81565b60405160ff90911681526020015b60405180910390f35b6102826102c4366004614d5b565b6108a3565b6102826102d7366004614dad565b6108af565b6102826102ea366004614dfb565b610e63565b6103026102fd366004614d96565b610ed7565b6040516001600160401b0390911681526020016102ad565b61032361271081565b60405161ffff90911681526020016102ad565b610282610344366004614e30565b610f2b565b610282610357366004614d5b565b610f3e565b61036f61036a366004614ea3565b610f4a565b6040519081526020016102ad565b61036f610f7f565b610282610393366004614e30565b610f8e565b6103a0601481565b60405163ffffffff90911681526020016102ad565b6102826103c3366004614dfb565b610f9a565b61036f6103d6366004614f0a565b6111ed565b61036f5f81565b6102826103f0366004614d5b565b61120d565b5f80516020615ccc833981519152546001600160a01b03165b6040516001600160a01b0390911681526020016102ad565b610282610434366004614e30565b611219565b610282610447366004614dfb565b611225565b61029f603081565b610282610462366004614f25565b611426565b610282610475366004614d96565b6114d7565b61036f610488366004614f53565b61156b565b61028261049b366004614e30565b611644565b61036f6104ae366004614f6c565b611650565b6102826104c1366004614f8c565b61167c565b61036f6104d4366004614f53565b61175b565b61036f7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b61040e6005600160991b0181565b61028261051c366004614d96565b61194a565b610302611ba3565b61036f7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b61028261055e366004614d96565b611bc5565b61029f601481565b61057e610579366004614f53565b611ce1565b604080519283526001600160401b039091166020830152016102ad565b6105ae6105a9366004614d96565b611e64565b6040516102ad9190615034565b6103026202a30081565b61036f5f80516020615ccc83398151915281565b6102826105e7366004614f25565b611fb3565b61036f6105fa3660046150ea565b61204a565b61060b8383835f612082565b505050565b5f6106196120ae565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff169081111561065357610653614fbf565b600581111561066457610664614fbf565b815260200160018201805461067890615155565b80601f01602080910402602001604051908101604052809291908181526020018280546106a490615155565b80156106ef5780601f106106c6576101008083540402835291602001916106ef565b820191905f5260205f20905b8154815290600101906020018083116106d257829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561076757610767614fbf565b146107a3575f8381526005830160205260409081902054905163170cc93360e21b815261079a9160ff169060040161518d565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561081a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108419190810190615296565b6040518263ffffffff1660e01b815260040161085d91906152c7565b6020604051808303815f875af1158015610879573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061089d91906152d9565b50505050565b61089d8383835f6120d2565b5f6108b86120ae565b600781015490915060ff16156108e157604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610924573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061094891906152d9565b836020013514610971576040516372b0a7e760e11b81526020840135600482015260240161079a565b3061098260608501604086016152f0565b6001600160a01b0316146109c5576109a060608401604085016152f0565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161079a565b5f6109d3606085018561530b565b905090505f805b828163ffffffff161015610c59575f6109f6606088018861530b565b8363ffffffff16818110610a0c57610a0c615350565b9050602002810190610a1e9190615364565b610a27906153cf565b80516040519192505f916006880191610a3f9161544a565b90815260200160405180910390205414610a6f57805160405163a41f772f60e01b815261079a91906004016152c7565b805151601414610a95578051604051633e08a12560e11b815261079a91906004016152c7565b5f6002885f013584604051602001610ac492919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610ade9161544a565b602060405180830381855afa158015610af9573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b1c91906152d9565b90508086600601835f0151604051610b34919061544a565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610b74908261549f565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610be3908561556e565b8251602001519094506bffffffffffffffffffffffff1916817f9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d78460400151604051610c3e91906001600160401b0391909116815260200190565b60405180910390a3505080610c529061558e565b90506109da565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c9c910460ff16836155b0565b6001600160401b03161015610ccf57604051633e1a785160e01b81526001600160401b038216600482015260240161079a565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610cf3876123ff565b604001516040518263ffffffff1660e01b8152600401610d1391906152c7565b602060405180830381865af4158015610d2e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5291906152d9565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d8c9190615706565b5f60405180830381865af4158015610da6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dcd9190810190615296565b90505f600282604051610de0919061544a565b602060405180830381855afa158015610dfb573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610e1e91906152d9565b9050828114610e4a5760405163baaea89d60e01b8152600481018290526024810184905260440161079a565b5050506007909201805460ff1916600117905550505050565b610e6c82612515565b610e8c576040516330efa98b60e01b81526004810183905260240161079a565b5f610e9683611e64565b5190506002816005811115610ead57610ead614fbf565b14610ecd578060405163170cc93360e21b815260040161079a919061518d565b61089d838361253e565b5f80610ee16127e4565b60030154610eef908461579a565b9050801580610f0457506001600160401b0381115b15610f255760405163222d164360e21b81526004810184905260240161079a565b92915050565b610f37848484846120d2565b5050505050565b61089d8383835f612808565b5f610f53612a4f565b610f5f85858585612a86565b9050610f7760015f80516020615cec83398151915255565b949350505050565b5f610f886120ae565b54919050565b61089d84848484612cd3565b5f610fa36127e4565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610fdc57610fdc614fbf565b6003811115610fed57610fed614fbf565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61106382611e64565b905060018351600381111561107a5761107a614fbf565b1461109b578251604051633b0d540d60e21b815261079a91906004016157b9565b6004815160058111156110b0576110b0614fbf565b036110c6576110be86612cff565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611166575f806110f387611ce1565b915091508184146111215760405163fee3144560e01b8152600481018390526024810185905260440161079a565b8460a001516001600160401b0316816001600160401b0316101561116357604051632e19bc2d60e11b81526001600160401b038216600482015260240161079a565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6111f66127e4565b60030154610f25906001600160401b0384166157d3565b61060b8383835f612cd3565b610f3784848484612808565b61122d612a4f565b5f6112366127e4565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561126f5761126f614fbf565b600381111561128057611280614fbf565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112f9576112f9614fbf565b1461131a578051604051633b0d540d60e21b815261079a91906004016157b9565b5f6113288260400151611e64565b905060046113398360400151611e64565b51600581111561134b5761134b614fbf565b1415801561137257508160c001516001600160401b031681608001516001600160401b0316105b15611400575f8061138286611ce1565b91509150818460400151146113bb5781846040015160405163fee3144560e01b815260040161079a929190918252602082015260400190565b806001600160401b03168460c001516001600160401b031611156113fd57604051632e19bc2d60e11b81526001600160401b038216600482015260240161079a565b50505b61140985612cff565b50505061142260015f80516020615cec83398151915255565b5050565b5f61142f6127e4565b90506001600160a01b0382166114635760405163caa903f960e01b81526001600160a01b038316600482015260240161079a565b5f8381526006820160205260409020546001600160a01b031633146114a957335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161079a565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6114e06127e4565b90505f6114ec83611e64565b519050600481600581111561150357611503614fbf565b14611523578060405163170cc93360e21b815260040161079a919061518d565b5f8381526006830160205260409020546001600160a01b031633146115485733611484565b5f83815260068301602052604090205461060b906001600160a01b031684612ed0565b5f611574612a4f565b5f61157d6127e4565b90505f8061158a85612efa565b9150915061159782612515565b6115a5575091506116299050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806115e75750805b6004835160058111156115fc576115fc614fbf565b0361160b5761160b8185612ed0565b6116218261161c85604001516111ed565b6132af565b509193505050505b61163f60015f80516020615cec83398151915255565b919050565b61089d84848484612082565b5f611659612a4f565b6116648333846132d2565b9050610f2560015f80516020615cec83398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff16806116c5575080546001600160401b03808416911610155b156116e35760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561170e8484613517565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f806117656120ae565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61178c876123ff565b604001516040518263ffffffff1660e01b81526004016117ac91906152c7565b6040805180830381865af41580156117c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ea91906157ea565b915091508061181057604051632d07135360e01b8152811515600482015260240161079a565b5f8281526004840160205260409020805461182a90615155565b90505f0361184e5760405163089938b360e11b81526004810183905260240161079a565b60015f838152600580860160205260409091205460ff169081111561187557611875614fbf565b146118a8575f8281526005840160205260409081902054905163170cc93360e21b815261079a9160ff169060040161518d565b5f82815260048401602052604081206118c091614ca7565b5f828152600584016020908152604091829020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff19909216919091179091559101549251600160c01b90930416825283917f967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06910160405180910390a2509392505050565b5f6119536127e4565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561198c5761198c614fbf565b600381111561199d5761199d614fbf565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611a1657611a16614fbf565b14158015611a375750600381516003811115611a3457611a34614fbf565b14155b15611a58578051604051633b0d540d60e21b815261079a91906004016157b9565b5f611a668260400151611e64565b905080606001516001600160401b03165f03611a98576040516339b894f960e21b81526004810185905260240161079a565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611b0693906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611b20573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b479190810190615296565b6040518263ffffffff1660e01b8152600401611b6391906152c7565b6020604051808303815f875af1158015611b7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f3791906152d9565b5f611bac6120ae565b60030154600160401b90046001600160401b0316919050565b5f611bce6120ae565b5f8381526004820160205260409020805491925090611bec90615155565b90505f03611c105760405163089938b360e11b81526004810183905260240161079a565b60015f838152600580840160205260409091205460ff1690811115611c3757611c37614fbf565b14611c6a575f8281526005820160205260409081902054905163170cc93360e21b815261079a9160ff169060040161518d565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611ca1920161580d565b6020604051808303815f875af1158015611cbd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061060b91906152d9565b5f805f611ced846123ff565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611d2d91906152c7565b606060405180830381865af4158015611d48573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6c9190615897565b9250925092505f611d7b6120ae565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611dcf57604051632e19bc2d60e11b81526001600160401b038416600482015260240161079a565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611e4f90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611e6c614cde565b5f611e756120ae565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611eaf57611eaf614fbf565b6005811115611ec057611ec0614fbf565b8152602001600182018054611ed490615155565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0090615155565b8015611f4b5780601f10611f2257610100808354040283529160200191611f4b565b820191905f5260205f20905b815481529060010190602001808311611f2e57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b038116611fe55760405163caa903f960e01b81526001600160a01b038216600482015260240161079a565b5f611fee6127e4565b5f8481526007820160205260409020549091506001600160a01b0361010090910416331461201c5733611484565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f806120546120ae565b905080600601848460405161206a9291906158d7565b90815260200160405180910390205491505092915050565b61208e848484846120d2565b61089d57604051631036cf9160e11b81526004810185905260240161079a565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b5f806120dc6127e4565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561211557612115614fbf565b600381111561212657612126614fbf565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61219c82611e64565b90506002835160038111156121b3576121b3614fbf565b146121d4578251604051633b0d540d60e21b815261079a91906004016157b9565b60208301516001600160a01b03163314612270575f8281526006850160205260409020546001600160a01b0316331461220d5733611484565b5f82815260068501602052604090205460c082015161223c91600160b01b90046001600160401b03169061556e565b6001600160401b03164210156122705760405163fb6ce63f60e01b81526001600160401b034216600482015260240161079a565b60028151600581111561228557612285614fbf565b036123a757600284015460808401516122a7916001600160401b03169061556e565b6001600160401b03164210156122db5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161079a565b87156122ed576122eb828861253e565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a082015161232691849161232191906158e6565b613531565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561236984888c6136fb565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610f779350505050565b6004815160058111156123bc576123bc614fbf565b036123e3576123cc83878b6136fb565b506123d689612cff565b6001945050505050610f77565b805160405163170cc93360e21b815261079a919060040161518d565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612463573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261248a9190810190615906565b91509150806124ac57604051636b2f19e960e01b815260040160405180910390fd5b8151156124d2578151604051636ba589a560e01b8152600481019190915260240161079a565b60208201516001600160a01b03161561250e576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161079a565b5092915050565b5f8061251f6127e4565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612589573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125b09190810190615906565b91509150806125d257604051636b2f19e960e01b815260040160405180910390fd5b5f6125db6127e4565b6005810154845191925014612609578251604051636ba589a560e01b8152600481019190915260240161079a565b60208301516001600160a01b031615612645576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161079a565b60208301516001600160a01b031615612681576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161079a565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016126be91906152c7565b6040805180830381865af41580156126d8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126fc9190615996565b9150915081881461272a5760405163fee3144560e01b8152600481018390526024810189905260440161079a565b5f8881526006840160205260409020600101546001600160401b0390811690821611156127bb575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a26127d9565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806128126127e4565b905061281d866138e9565b5f61282787611e64565b905061283287612515565b61284157600192505050610f77565b5f8781526006830160205260409020546001600160a01b031633146128665733611484565b5f87815260068301602052604090205460c082015161289591600160b01b90046001600160401b03169061556e565b6001600160401b03168160e001516001600160401b031610156128dc5760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161079a565b5f86156128f4576128ed888761253e565b9050612912565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612937906111ed565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa1580156129a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129c591906152d9565b90506001600160a01b0386166129f1575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612a109084906159b9565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615cec833981519152805460011901612a8057604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f80612a906127e4565b600281015490915061ffff600160401b90910481169086161080612ab9575061271061ffff8616115b15612add57604051635f12e6c360e11b815261ffff8616600482015260240161079a565b60028101546001600160401b039081169085161015612b19576040516202a06d60e11b81526001600160401b038516600482015260240161079a565b8054831080612b2b5750806001015483115b15612b4c5760405163222d164360e21b81526004810184905260240161079a565b5f612b5684613bd4565b90505f612b6282610ed7565b90505f612c29612b728a806159cc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612bb39250505060208c018c6159cc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612bf79250505060608d0160408e01614f0a565b612c0460608e018e615a0e565b612c0d90615a22565b612c1a60808f018f615a0e565b612c2390615a22565b87613bf7565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b60015f80516020615cec83398151915255565b612cdf84848484612808565b61089d57604051635bff683f60e11b81526004810185905260240161079a565b5f612d086127e4565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612d4157612d41614fbf565b6003811115612d5257612d52614fbf565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612dc6613fe1565b8260800151612dd5919061556e565b6001600160401b0316421015612e095760405163fb6ce63f60e01b81526001600160401b034216600482015260240161079a565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612e64575060208201515b5f80612e71838886613ffc565b91509150612e8a856020015161161c87606001516111ed565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f612ed96127e4565b5f838152600a820160205260408120805491905590915061089d84826140a9565b5f612f03614cde565b5f612f0c6120ae565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612f33886123ff565b604001516040518263ffffffff1660e01b8152600401612f5391906152c7565b6040805180830381865af4158015612f6d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f9191906157ea565b915091508015612fb857604051632d07135360e01b8152811515600482015260240161079a565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612ff057612ff0614fbf565b600581111561300157613001614fbf565b815260200160018201805461301590615155565b80601f016020809104026020016040519081016040528092919081815260200182805461304190615155565b801561308c5780601f106130635761010080835404028352916020019161308c565b820191905f5260205f20905b81548152906001019060200180831161306f57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561310457613104614fbf565b14158015613125575060018151600581111561312257613122614fbf565b14155b1561314657805160405163170cc93360e21b815261079a919060040161518d565b60038151600581111561315b5761315b614fbf565b03613169576004815261316e565b600581525b836006018160200151604051613184919061544a565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff19169060019084908111156131c7576131c7614fbf565b0217905550602082015160018201906131e0908261549f565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f80516020615ccc83398151915254611422906001600160a01b0316838361411f565b5f806132dc6127e4565b90505f6132eb6102fd85613bd4565b90505f6132f787611e64565b905061330287612515565b613322576040516330efa98b60e01b81526004810188905260240161079a565b60028151600581111561333757613337614fbf565b1461335857805160405163170cc93360e21b815261079a919060040161518d565b5f828260a00151613369919061556e565b905083600201600a9054906101000a90046001600160401b0316826040015161339291906155b0565b6001600160401b0316816001600160401b031611156133cf57604051636d51fe0560e11b81526001600160401b038216600482015260240161079a565b5f806133db8a84613531565b915091505f8a8360405160200161340992919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b61351f61417e565b613528826141c9565b61142281614246565b5f805f61353c6120ae565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b031661356c85826142ae565b5f6135768761451b565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561361a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526136419190810190615296565b6040518263ffffffff1660e01b815260040161365d91906152c7565b6020604051808303815f875af1158015613679573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061369d91906152d9565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806137056127e4565b90505f6137158660400151611e64565b90505f60038251600581111561372d5761372d614fbf565b148061374b575060048251600581111561374957613749614fbf565b145b1561375b575060e0810151613798565b60028251600581111561377057613770614fbf565b0361377c575042613798565b815160405163170cc93360e21b815261079a919060040161518d565b86608001516001600160401b0316816001600160401b0316116137c0575f9350505050613510565b600483015460608801515f916001600160a01b031690634f22429f906137e5906111ed565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613866573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061388a91906152d9565b90506001600160a01b0387166138a257876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f6138f26120ae565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff169081111561392c5761392c614fbf565b600581111561393d5761393d614fbf565b815260200160018201805461395190615155565b80601f016020809104026020016040519081016040528092919081815260200182805461397d90615155565b80156139c85780601f1061399f576101008083540402835291602001916139c8565b820191905f5260205f20905b8154815290600101906020018083116139ab57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613a4057613a40614fbf565b14613a73575f8381526005830160205260409081902054905163170cc93360e21b815261079a9160ff169060040161518d565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613ab857613ab8614fbf565b021790555060208201516001820190613ad1908261549f565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613b718482613531565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613bc6939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f610f25825f80516020615ccc833981519152546001600160a01b031690614584565b5f613c006120ae565b6007015460ff16613c2457604051637fab81e560e01b815260040160405180910390fd5b5f613c2d6120ae565b905042866001600160401b0316111580613c5c5750613c4f6202a300426159b9565b866001600160401b031610155b15613c8557604051635879da1360e11b81526001600160401b038716600482015260240161079a565b60038101546001600160401b0390613ca890600160401b900482168583166159b9565b1115613cd257604051633e1a785160e01b81526001600160401b038416600482015260240161079a565b613cdb85614590565b613ce484614590565b8651603014613d0b5786516040516326475b2f60e11b815260040161079a91815260200190565b8751601414613d2f5787604051633e08a12560e11b815260040161079a91906152c7565b5f801b8160060189604051613d44919061544a565b90815260200160405180910390205414613d73578760405163a41f772f60e01b815260040161079a91906152c7565b613d7d835f6142ae565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613dfd9190615b4f565b5f60405180830381865af4158015613e17573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613e3e9190810190615c06565b5f82815260048601602052604090209193509150613e5c828261549f565b5081836006018b604051613e70919061544a565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613eac9085906004016152c7565b6020604051808303815f875af1158015613ec8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613eec91906152d9565b5f8481526005860160205260409020805460ff19166001908117825591925001613f168c8261549f565b505f8381526005850160205260409020600281018054600160c01b6001600160401b038a1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b0319169055613f6d8b6020015190565b6bffffffffffffffffffffffff1916837f5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d838c8a604051613fca939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a350909998505050505050505050565b5f613fea6120ae565b600101546001600160401b0316919050565b5f805f6140076127e4565b5f8681526008820160205260408120805490829055919250908190801561409b575f8781526006850160205260409020546127109061405190600160a01b900461ffff16836157d3565b61405b919061579a565b91508184600a015f8981526020019081526020015f205f82825461407f91906159b9565b9091555061408f90508282615c49565b925061409b89846140a9565b509097909650945050505050565b5f5f80516020615ccc83398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015614104575f80fd5b505af1158015614116573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261060b91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506146af565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166141c757604051631afcd79f60e31b815260040160405180910390fd5b565b6141d161417e565b6141da81614710565b6141e2614729565b614243606082013560808301356141ff60c0850160a08601614f0a565b61420f60e0860160c08701615c5c565b614220610100870160e08801615c75565b61010087013561423861014089016101208a016152f0565b886101400135614739565b50565b61424e61417e565b5f80516020615ccc8339815191526001600160a01b03821661428e57604051637330680360e01b81526001600160a01b038316600482015260240161079a565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f6142b76120ae565b90505f826001600160401b0316846001600160401b031611156142e5576142de83856158e6565b90506142f2565b6142ef84846158e6565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b900490921660608201524291158061435f57506001840154815161435b916001600160401b0316906159b9565b8210155b15614387576001600160401b03808416606083015282825260408201511660208201526143a6565b8281606001818151614399919061556e565b6001600160401b03169052505b60608101516143b69060646155b0565b602082015160018601546001600160401b0392909216916143e19190600160401b900460ff166155b0565b6001600160401b0316101561441a57606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161079a565b858160400181815161442c919061556e565b6001600160401b031690525060408101805186919061444c9083906158e6565b6001600160401b03169052506001840154604082015160649161447a91600160401b90910460ff16906155b0565b6001600160401b031610156144b3576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161079a565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f806145256120ae565b5f848152600582016020526040902060020180549192509060089061455990600160401b90046001600160401b0316615c95565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6135108333846148fb565b805163ffffffff161580156145a9575060208101515115155b156145dd57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161079a565b602081015151815163ffffffff16111561462057805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161079a565b60015b816020015151811015611422576020820151614640600183615c49565b8151811061465057614650615350565b60200260200101516001600160a01b03168260200151828151811061467757614677615350565b60200260200101516001600160a01b031610156146a757604051630dbc8d5f60e31b815260040160405180910390fd5b600101614623565b5f6146c36001600160a01b03841683614a5e565b905080515f141580156146e75750808060200190518101906146e59190615cb0565b155b1561060b57604051635274afe760e01b81526001600160a01b038416600482015260240161079a565b61471861417e565b614720614a6b565b61424381614a73565b61473161417e565b6141c7614b57565b61474161417e565b5f61474a6127e4565b905061ffff86161580614762575061271061ffff8716115b1561478657604051635f12e6c360e11b815261ffff8716600482015260240161079a565b878911156147aa5760405163222d164360e21b8152600481018a905260240161079a565b60ff851615806147bd5750600a60ff8616115b156147e05760405163170db35960e31b815260ff8616600482015260240161079a565b6147e8613fe1565b6001600160401b0316876001600160401b03161015614824576040516202a06d60e11b81526001600160401b038816600482015260240161079a565b835f036148445760405163a733007160e01b815260040160405180910390fd5b8161486557604051632f6bd1db60e01b81526004810183905260240161079a565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa158015614941573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061496591906152d9565b905061497c6001600160a01b038616853086614b5f565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa1580156149c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906149e491906152d9565b9050818111614a4a5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161079a565b614a548282615c49565b9695505050505050565b606061351083835f614b98565b6141c761417e565b614a7b61417e565b5f614a846120ae565b8235815590506014614a9c6060840160408501615c75565b60ff161180614abb5750614ab66060830160408401615c75565b60ff16155b15614aef57614ad06060830160408401615c75565b604051634a59bbff60e11b815260ff909116600482015260240161079a565b614aff6060830160408401615c75565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614b306040830160208401614f0a565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612cc061417e565b6040516001600160a01b03848116602483015283811660448301526064820183905261089d9186918216906323b872dd9060840161414c565b606081471015614bbd5760405163cd78605960e01b815230600482015260240161079a565b5f80856001600160a01b03168486604051614bd8919061544a565b5f6040518083038185875af1925050503d805f8114614c12576040519150601f19603f3d011682016040523d82523d5f602084013e614c17565b606091505b5091509150614a54868383606082614c3757614c3282614c7e565b613510565b8151158015614c4e57506001600160a01b0384163b155b15614c7757604051639996b31560e01b81526001600160a01b038516600482015260240161079a565b5080613510565b805115614c8e5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614cb390615155565b5f825580601f10614cc2575050565b601f0160209004905f5260205f20908101906142439190614d23565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614d37575f8155600101614d24565b5090565b8015158114614243575f80fd5b803563ffffffff8116811461163f575f80fd5b5f805f60608486031215614d6d575f80fd5b833592506020840135614d7f81614d3b565b9150614d8d60408501614d48565b90509250925092565b5f60208284031215614da6575f80fd5b5035919050565b5f8060408385031215614dbe575f80fd5b82356001600160401b03811115614dd3575f80fd5b830160808186031215614de4575f80fd5b9150614df260208401614d48565b90509250929050565b5f8060408385031215614e0c575f80fd5b82359150614df260208401614d48565b6001600160a01b0381168114614243575f80fd5b5f805f8060808587031215614e43575f80fd5b843593506020850135614e5581614d3b565b9250614e6360408601614d48565b91506060850135614e7381614e1c565b939692955090935050565b803561ffff8116811461163f575f80fd5b6001600160401b0381168114614243575f80fd5b5f805f8060808587031215614eb6575f80fd5b84356001600160401b03811115614ecb575f80fd5b850160a08188031215614edc575f80fd5b9350614eea60208601614e7e565b92506040850135614efa81614e8f565b9396929550929360600135925050565b5f60208284031215614f1a575f80fd5b813561351081614e8f565b5f8060408385031215614f36575f80fd5b823591506020830135614f4881614e1c565b809150509250929050565b5f60208284031215614f63575f80fd5b61351082614d48565b5f8060408385031215614f7d575f80fd5b50508035926020909101359150565b5f80828403610180811215614f9f575f80fd5b61016080821215614fae575f80fd5b8493508301359050614f4881614e1c565b634e487b7160e01b5f52602160045260245ffd5b60068110614fe357614fe3614fbf565b9052565b5f5b83811015615001578181015183820152602001614fe9565b50505f910152565b5f8151808452615020816020860160208601614fe7565b601f01601f19169290920160200192915050565b60208152615046602082018351614fd3565b5f6020830151610100806040850152615063610120850183615009565b915060408501516001600160401b038082166060870152806060880151166080870152505060808501516150a260a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f80602083850312156150fb575f80fd5b82356001600160401b0380821115615111575f80fd5b818501915085601f830112615124575f80fd5b813581811115615132575f80fd5b866020828501011115615143575f80fd5b60209290920196919550909350505050565b600181811c9082168061516957607f821691505b60208210810361518757634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610f258284614fd3565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156151d1576151d161519b565b60405290565b604080519081016001600160401b03811182821017156151d1576151d161519b565b604051601f8201601f191681016001600160401b03811182821017156152215761522161519b565b604052919050565b5f6001600160401b038211156152415761524161519b565b50601f01601f191660200190565b5f82601f83011261525e575f80fd5b815161527161526c82615229565b6151f9565b818152846020838601011115615285575f80fd5b610f77826020830160208701614fe7565b5f602082840312156152a6575f80fd5b81516001600160401b038111156152bb575f80fd5b610f778482850161524f565b602081525f6135106020830184615009565b5f602082840312156152e9575f80fd5b5051919050565b5f60208284031215615300575f80fd5b813561351081614e1c565b5f808335601e19843603018112615320575f80fd5b8301803591506001600160401b03821115615339575f80fd5b6020019150600581901b36038213156136f4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615378575f80fd5b9190910192915050565b5f82601f830112615391575f80fd5b813561539f61526c82615229565b8181528460208386010111156153b3575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156153df575f80fd5b6153e76151af565b82356001600160401b03808211156153fd575f80fd5b61540936838701615382565b8352602085013591508082111561541e575f80fd5b5061542b36828601615382565b602083015250604083013561543f81614e8f565b604082015292915050565b5f8251615378818460208701614fe7565b601f82111561060b57805f5260205f20601f840160051c810160208510156154805750805b601f840160051c820191505b81811015610f37575f815560010161548c565b81516001600160401b038111156154b8576154b861519b565b6154cc816154c68454615155565b8461545b565b602080601f8311600181146154ff575f84156154e85750858301515b5f19600386901b1c1916600185901b1785556110be565b5f85815260208120601f198616915b8281101561552d5788860151825594840194600190910190840161550e565b508582101561554a57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111561250e5761250e61555a565b5f63ffffffff8083168181036155a6576155a661555a565b6001019392505050565b6001600160401b038181168382160280821691908281146155d3576155d361555a565b505092915050565b5f808335601e198436030181126155f0575f80fd5b83016020810192503590506001600160401b0381111561560e575f80fd5b8036038213156136f4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156156f957848303601f19018952813536889003605e19018112615680575f80fd5b8701606061568e82806155db565b82875261569e838801828461561c565b925050506156ae868301836155db565b868303888801526156c083828461561c565b9250505060408083013592506156d583614e8f565b6001600160401b03929092169490910193909352978301979083019060010161565b565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561572a81614e1c565b6001600160a01b031660608381019190915283013536849003601e19018112615751575f80fd5b83016020810190356001600160401b0381111561576c575f80fd5b8060051b360382131561577d575f80fd5b60808085015261579160a085018284615644565b95945050505050565b5f826157b457634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106157cd576157cd614fbf565b91905290565b8082028115828204841417610f2557610f2561555a565b5f80604083850312156157fb575f80fd5b825191506020830151614f4881614d3b565b5f60208083525f845461581f81615155565b806020870152604060018084165f8114615840576001811461585c57615889565b60ff19851660408a0152604084151560051b8a01019550615889565b895f5260205f205f5b858110156158805781548b8201860152908301908801615865565b8a016040019650505b509398975050505050505050565b5f805f606084860312156158a9575f80fd5b8351925060208401516158bb81614e8f565b60408501519092506158cc81614e8f565b809150509250925092565b818382375f9101908152919050565b6001600160401b0382811682821603908082111561250e5761250e61555a565b5f8060408385031215615917575f80fd5b82516001600160401b038082111561592d575f80fd5b9084019060608287031215615940575f80fd5b6159486151af565b82518152602083015161595a81614e1c565b6020820152604083015182811115615970575f80fd5b61597c8882860161524f565b6040830152508094505050506020830151614f4881614d3b565b5f80604083850312156159a7575f80fd5b825191506020830151614f4881614e8f565b80820180821115610f2557610f2561555a565b5f808335601e198436030181126159e1575f80fd5b8301803591506001600160401b038211156159fa575f80fd5b6020019150368190038213156136f4575f80fd5b5f8235603e19833603018112615378575f80fd5b5f60408236031215615a32575f80fd5b615a3a6151d7565b615a4383614d48565b81526020808401356001600160401b0380821115615a5f575f80fd5b9085019036601f830112615a71575f80fd5b813581811115615a8357615a8361519b565b8060051b9150615a948483016151f9565b8181529183018401918481019036841115615aad575f80fd5b938501935b83851015615ad75784359250615ac783614e1c565b8282529385019390850190615ab2565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615b445784516001600160a01b03168252938301936001929092019190830190615b1b565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b75610100840182615009565b90506040840151601f1980858403016060860152615b938383615009565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615bc38383615ae9565b925060a08601519150808584030160c086015250615be18282615ae9565b91505060c0840151615bfe60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615c17575f80fd5b8251915060208301516001600160401b03811115615c33575f80fd5b615c3f8582860161524f565b9150509250929050565b81810381811115610f2557610f2561555a565b5f60208284031215615c6c575f80fd5b61351082614e7e565b5f60208284031215615c85575f80fd5b813560ff81168114613510575f80fd5b5f6001600160401b038083168181036155a6576155a661555a565b5f60208284031215615cc0575f80fd5b815161351081614d3b56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220ddf9048e6e6779d040a184e9d35df5eabe9bdaf0aad963310918011dedf64a3e64736f6c63430008190033", } // ERC20TokenStakingManagerABI is the input ABI used to generate the binding from. @@ -525,6 +526,37 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerCallerSession) MAXIMUMS return _ERC20TokenStakingManager.Contract.MAXIMUMSTAKEMULTIPLIERLIMIT(&_ERC20TokenStakingManager.CallOpts) } +// NODEIDLENGTH is a free data retrieval call binding the contract method 0x63e2ca97. +// +// Solidity: function NODE_ID_LENGTH() view returns(uint32) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerCaller) NODEIDLENGTH(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _ERC20TokenStakingManager.contract.Call(opts, &out, "NODE_ID_LENGTH") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// NODEIDLENGTH is a free data retrieval call binding the contract method 0x63e2ca97. +// +// Solidity: function NODE_ID_LENGTH() view returns(uint32) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) NODEIDLENGTH() (uint32, error) { + return _ERC20TokenStakingManager.Contract.NODEIDLENGTH(&_ERC20TokenStakingManager.CallOpts) +} + +// NODEIDLENGTH is a free data retrieval call binding the contract method 0x63e2ca97. +// +// Solidity: function NODE_ID_LENGTH() view returns(uint32) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerCallerSession) NODEIDLENGTH() (uint32, error) { + return _ERC20TokenStakingManager.Contract.NODEIDLENGTH(&_ERC20TokenStakingManager.CallOpts) +} + // POSVALIDATORMANAGERSTORAGELOCATION is a free data retrieval call binding the contract method 0xafb98096. // // Solidity: function POS_VALIDATOR_MANAGER_STORAGE_LOCATION() view returns(bytes32) @@ -682,7 +714,7 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerCallerSession) Erc20() // GetValidator is a free data retrieval call binding the contract method 0xd5f20ff6. // -// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64)) +// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64,uint64)) func (_ERC20TokenStakingManager *ERC20TokenStakingManagerCaller) GetValidator(opts *bind.CallOpts, validationID [32]byte) (Validator, error) { var out []interface{} err := _ERC20TokenStakingManager.contract.Call(opts, &out, "getValidator", validationID) @@ -699,18 +731,49 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerCaller) GetValidator(op // GetValidator is a free data retrieval call binding the contract method 0xd5f20ff6. // -// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64)) +// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64,uint64)) func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) GetValidator(validationID [32]byte) (Validator, error) { return _ERC20TokenStakingManager.Contract.GetValidator(&_ERC20TokenStakingManager.CallOpts, validationID) } // GetValidator is a free data retrieval call binding the contract method 0xd5f20ff6. // -// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64)) +// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64,uint64)) func (_ERC20TokenStakingManager *ERC20TokenStakingManagerCallerSession) GetValidator(validationID [32]byte) (Validator, error) { return _ERC20TokenStakingManager.Contract.GetValidator(&_ERC20TokenStakingManager.CallOpts, validationID) } +// L1TotalWeight is a free data retrieval call binding the contract method 0xbb0b1938. +// +// Solidity: function l1TotalWeight() view returns(uint64) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerCaller) L1TotalWeight(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _ERC20TokenStakingManager.contract.Call(opts, &out, "l1TotalWeight") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// L1TotalWeight is a free data retrieval call binding the contract method 0xbb0b1938. +// +// Solidity: function l1TotalWeight() view returns(uint64) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) L1TotalWeight() (uint64, error) { + return _ERC20TokenStakingManager.Contract.L1TotalWeight(&_ERC20TokenStakingManager.CallOpts) +} + +// L1TotalWeight is a free data retrieval call binding the contract method 0xbb0b1938. +// +// Solidity: function l1TotalWeight() view returns(uint64) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerCallerSession) L1TotalWeight() (uint64, error) { + return _ERC20TokenStakingManager.Contract.L1TotalWeight(&_ERC20TokenStakingManager.CallOpts) +} + // RegisteredValidators is a free data retrieval call binding the contract method 0xfd7ac5e7. // // Solidity: function registeredValidators(bytes nodeID) view returns(bytes32) @@ -742,6 +805,37 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerCallerSession) Register return _ERC20TokenStakingManager.Contract.RegisteredValidators(&_ERC20TokenStakingManager.CallOpts, nodeID) } +// SubnetID is a free data retrieval call binding the contract method 0x5dc1f535. +// +// Solidity: function subnetID() view returns(bytes32) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerCaller) SubnetID(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ERC20TokenStakingManager.contract.Call(opts, &out, "subnetID") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// SubnetID is a free data retrieval call binding the contract method 0x5dc1f535. +// +// Solidity: function subnetID() view returns(bytes32) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) SubnetID() ([32]byte, error) { + return _ERC20TokenStakingManager.Contract.SubnetID(&_ERC20TokenStakingManager.CallOpts) +} + +// SubnetID is a free data retrieval call binding the contract method 0x5dc1f535. +// +// Solidity: function subnetID() view returns(bytes32) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerCallerSession) SubnetID() ([32]byte, error) { + return _ERC20TokenStakingManager.Contract.SubnetID(&_ERC20TokenStakingManager.CallOpts) +} + // ValueToWeight is a free data retrieval call binding the contract method 0x2e2194d8. // // Solidity: function valueToWeight(uint256 value) view returns(uint64) @@ -909,48 +1003,69 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) Comp return _ERC20TokenStakingManager.Contract.CompleteEndDelegation(&_ERC20TokenStakingManager.TransactOpts, delegationID, messageIndex) } -// CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. -// -// Solidity: function completeEndValidation(uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) CompleteEndValidation(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "completeEndValidation", messageIndex) -} - -// CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. -// -// Solidity: function completeEndValidation(uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) CompleteEndValidation(messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.CompleteEndValidation(&_ERC20TokenStakingManager.TransactOpts, messageIndex) -} - -// CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. -// -// Solidity: function completeEndValidation(uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) CompleteEndValidation(messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.CompleteEndValidation(&_ERC20TokenStakingManager.TransactOpts, messageIndex) -} - // CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. // -// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns() +// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns(bytes32) func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) CompleteValidatorRegistration(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { return _ERC20TokenStakingManager.contract.Transact(opts, "completeValidatorRegistration", messageIndex) } // CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. // -// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns() +// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns(bytes32) func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) CompleteValidatorRegistration(messageIndex uint32) (*types.Transaction, error) { return _ERC20TokenStakingManager.Contract.CompleteValidatorRegistration(&_ERC20TokenStakingManager.TransactOpts, messageIndex) } // CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. // -// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns() +// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns(bytes32) func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) CompleteValidatorRegistration(messageIndex uint32) (*types.Transaction, error) { return _ERC20TokenStakingManager.Contract.CompleteValidatorRegistration(&_ERC20TokenStakingManager.TransactOpts, messageIndex) } +// CompleteValidatorRemoval is a paid mutator transaction binding the contract method 0x9681d940. +// +// Solidity: function completeValidatorRemoval(uint32 messageIndex) returns(bytes32) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) CompleteValidatorRemoval(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "completeValidatorRemoval", messageIndex) +} + +// CompleteValidatorRemoval is a paid mutator transaction binding the contract method 0x9681d940. +// +// Solidity: function completeValidatorRemoval(uint32 messageIndex) returns(bytes32) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) CompleteValidatorRemoval(messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.CompleteValidatorRemoval(&_ERC20TokenStakingManager.TransactOpts, messageIndex) +} + +// CompleteValidatorRemoval is a paid mutator transaction binding the contract method 0x9681d940. +// +// Solidity: function completeValidatorRemoval(uint32 messageIndex) returns(bytes32) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) CompleteValidatorRemoval(messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.CompleteValidatorRemoval(&_ERC20TokenStakingManager.TransactOpts, messageIndex) +} + +// CompleteValidatorWeightUpdate is a paid mutator transaction binding the contract method 0xce161f14. +// +// Solidity: function completeValidatorWeightUpdate(uint32 messageIndex) returns(bytes32, uint64) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) CompleteValidatorWeightUpdate(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "completeValidatorWeightUpdate", messageIndex) +} + +// CompleteValidatorWeightUpdate is a paid mutator transaction binding the contract method 0xce161f14. +// +// Solidity: function completeValidatorWeightUpdate(uint32 messageIndex) returns(bytes32, uint64) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) CompleteValidatorWeightUpdate(messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.CompleteValidatorWeightUpdate(&_ERC20TokenStakingManager.TransactOpts, messageIndex) +} + +// CompleteValidatorWeightUpdate is a paid mutator transaction binding the contract method 0xce161f14. +// +// Solidity: function completeValidatorWeightUpdate(uint32 messageIndex) returns(bytes32, uint64) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) CompleteValidatorWeightUpdate(messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.CompleteValidatorWeightUpdate(&_ERC20TokenStakingManager.TransactOpts, messageIndex) +} + // ForceInitializeEndDelegation is a paid mutator transaction binding the contract method 0x1ec44724. // // Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() @@ -1287,9 +1402,9 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) Subm return _ERC20TokenStakingManager.Contract.SubmitUptimeProof(&_ERC20TokenStakingManager.TransactOpts, validationID, messageIndex) } -// 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 +// 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 @@ -1303,7 +1418,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 *ERC20TokenStakingManagerCompletedValidatorRegistrationIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1312,7 +1427,7 @@ func (it *ERC20TokenStakingManagerDelegationEndedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerDelegationEnded) + it.Event = new(ERC20TokenStakingManagerCompletedValidatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1327,7 +1442,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(ERC20TokenStakingManagerCompletedValidatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1343,62 +1458,52 @@ func (it *ERC20TokenStakingManagerDelegationEndedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerDelegationEndedIterator) Error() error { +func (it *ERC20TokenStakingManagerCompletedValidatorRegistrationIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerDelegationEndedIterator) Close() error { +func (it *ERC20TokenStakingManagerCompletedValidatorRegistrationIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerDelegationEnded represents a DelegationEnded event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerDelegationEnded struct { - DelegationID [32]byte +// ERC20TokenStakingManagerCompletedValidatorRegistration represents a CompletedValidatorRegistration event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerCompletedValidatorRegistration struct { ValidationID [32]byte - Rewards *big.Int - Fees *big.Int + Weight uint64 Raw types.Log // Blockchain specific contextual infos } -// FilterDelegationEnded is a free log retrieval operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. +// FilterCompletedValidatorRegistration is a free log retrieval operation binding the contract event 0x967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06. // -// 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 CompletedValidatorRegistration(bytes32 indexed validationID, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterCompletedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerCompletedValidatorRegistrationIterator, 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, "CompletedValidatorRegistration", validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerDelegationEndedIterator{contract: _ERC20TokenStakingManager.contract, event: "DelegationEnded", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerCompletedValidatorRegistrationIterator{contract: _ERC20TokenStakingManager.contract, event: "CompletedValidatorRegistration", logs: logs, sub: sub}, nil } -// WatchDelegationEnded is a free log subscription operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. +// WatchCompletedValidatorRegistration is a free log subscription operation binding the contract event 0x967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06. // -// 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 CompletedValidatorRegistration(bytes32 indexed validationID, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchCompletedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerCompletedValidatorRegistration, 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, "CompletedValidatorRegistration", validationIDRule) if err != nil { return nil, err } @@ -1408,8 +1513,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(ERC20TokenStakingManagerCompletedValidatorRegistration) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { return err } event.Raw = log @@ -1430,21 +1535,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegati }), nil } -// ParseDelegationEnded is a log parse operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. +// ParseCompletedValidatorRegistration is a log parse operation binding the contract event 0x967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06. // -// 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 CompletedValidatorRegistration(bytes32 indexed validationID, 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 } -// 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 +// 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 @@ -1458,7 +1563,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 *ERC20TokenStakingManagerCompletedValidatorRemovalIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1467,7 +1572,7 @@ func (it *ERC20TokenStakingManagerDelegatorAddedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerDelegatorAdded) + it.Event = new(ERC20TokenStakingManagerCompletedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1482,7 +1587,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(ERC20TokenStakingManagerCompletedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1498,73 +1603,51 @@ func (it *ERC20TokenStakingManagerDelegatorAddedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerDelegatorAddedIterator) Error() error { +func (it *ERC20TokenStakingManagerCompletedValidatorRemovalIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerDelegatorAddedIterator) Close() error { +func (it *ERC20TokenStakingManagerCompletedValidatorRemovalIterator) 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 +// ERC20TokenStakingManagerCompletedValidatorRemoval represents a CompletedValidatorRemoval event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerCompletedValidatorRemoval struct { + ValidationID [32]byte + Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorAdded is a free log retrieval operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. +// FilterCompletedValidatorRemoval is a free log retrieval operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. // -// 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 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) } - 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, "CompletedValidatorRemoval", validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerDelegatorAddedIterator{contract: _ERC20TokenStakingManager.contract, event: "DelegatorAdded", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerCompletedValidatorRemovalIterator{contract: _ERC20TokenStakingManager.contract, event: "CompletedValidatorRemoval", logs: logs, sub: sub}, nil } -// WatchDelegatorAdded is a free log subscription operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. +// WatchCompletedValidatorRemoval is a free log subscription operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. // -// 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 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) } - 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, "CompletedValidatorRemoval", validationIDRule) if err != nil { return nil, err } @@ -1574,8 +1657,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(ERC20TokenStakingManagerCompletedValidatorRemoval) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRemoval", log); err != nil { return err } event.Raw = log @@ -1596,21 +1679,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegato }), nil } -// ParseDelegatorAdded is a log parse operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. +// ParseCompletedValidatorRemoval is a log parse operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. // -// 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 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 } -// 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 +// 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 @@ -1624,7 +1707,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 *ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1633,7 +1716,7 @@ func (it *ERC20TokenStakingManagerDelegatorRegisteredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerDelegatorRegistered) + it.Event = new(ERC20TokenStakingManagerCompletedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1648,7 +1731,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(ERC20TokenStakingManagerCompletedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1664,61 +1747,53 @@ func (it *ERC20TokenStakingManagerDelegatorRegisteredIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerDelegatorRegisteredIterator) Error() error { +func (it *ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerDelegatorRegisteredIterator) Close() error { +func (it *ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerDelegatorRegistered represents a DelegatorRegistered event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerDelegatorRegistered struct { - DelegationID [32]byte +// ERC20TokenStakingManagerCompletedValidatorWeightUpdate represents a CompletedValidatorWeightUpdate event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerCompletedValidatorWeightUpdate struct { ValidationID [32]byte - StartTime *big.Int + Nonce uint64 + Weight uint64 Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorRegistered is a free log retrieval operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. +// FilterCompletedValidatorWeightUpdate is a free log retrieval operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. // -// 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) { +// 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) } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "DelegatorRegistered", delegationIDRule, validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerDelegatorRegisteredIterator{contract: _ERC20TokenStakingManager.contract, event: "DelegatorRegistered", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator{contract: _ERC20TokenStakingManager.contract, event: "CompletedValidatorWeightUpdate", logs: logs, sub: sub}, nil } -// WatchDelegatorRegistered is a free log subscription operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. +// WatchCompletedValidatorWeightUpdate is a free log subscription operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. // -// 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) { +// 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) } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "DelegatorRegistered", delegationIDRule, validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) if err != nil { return nil, err } @@ -1728,8 +1803,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(ERC20TokenStakingManagerCompletedValidatorWeightUpdate) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorWeightUpdate", log); err != nil { return err } event.Raw = log @@ -1750,21 +1825,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegato }), nil } -// ParseDelegatorRegistered is a log parse operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. +// ParseCompletedValidatorWeightUpdate is a log parse operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. // -// 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 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 } -// 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 +// 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 contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1778,7 +1853,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 *ERC20TokenStakingManagerDelegationEndedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1787,7 +1862,7 @@ func (it *ERC20TokenStakingManagerDelegatorRemovalInitializedIterator) Next() bo if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerDelegatorRemovalInitialized) + it.Event = new(ERC20TokenStakingManagerDelegationEnded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1802,7 +1877,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(ERC20TokenStakingManagerDelegationEnded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1818,28 +1893,30 @@ func (it *ERC20TokenStakingManagerDelegatorRemovalInitializedIterator) Next() bo } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerDelegatorRemovalInitializedIterator) Error() error { +func (it *ERC20TokenStakingManagerDelegationEndedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerDelegatorRemovalInitializedIterator) Close() error { +func (it *ERC20TokenStakingManagerDelegationEndedIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerDelegatorRemovalInitialized represents a DelegatorRemovalInitialized event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerDelegatorRemovalInitialized struct { +// ERC20TokenStakingManagerDelegationEnded represents a DelegationEnded event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerDelegationEnded struct { DelegationID [32]byte ValidationID [32]byte + Rewards *big.Int + Fees *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorRemovalInitialized is a free log retrieval operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. +// FilterDelegationEnded is a free log retrieval operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. // -// 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 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) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -1850,17 +1927,17 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterDelegat validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "DelegationEnded", delegationIDRule, validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerDelegatorRemovalInitializedIterator{contract: _ERC20TokenStakingManager.contract, event: "DelegatorRemovalInitialized", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerDelegationEndedIterator{contract: _ERC20TokenStakingManager.contract, event: "DelegationEnded", logs: logs, sub: sub}, nil } -// WatchDelegatorRemovalInitialized is a free log subscription operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. +// WatchDelegationEnded is a free log subscription operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. // -// 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 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) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -1871,7 +1948,7 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegato validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "DelegationEnded", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -1881,8 +1958,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(ERC20TokenStakingManagerDelegationEnded) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegationEnded", log); err != nil { return err } event.Raw = log @@ -1903,21 +1980,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegato }), nil } -// ParseDelegatorRemovalInitialized is a log parse operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. +// ParseDelegationEnded is a log parse operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. // -// 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 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 { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerInitialValidatorCreatedIterator is returned from FilterInitialValidatorCreated and is used to iterate over the raw logs and unpacked data for InitialValidatorCreated events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerInitialValidatorCreatedIterator struct { - Event *ERC20TokenStakingManagerInitialValidatorCreated // Event containing the contract specifics and raw log +// 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 contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1931,7 +2008,7 @@ type ERC20TokenStakingManagerInitialValidatorCreatedIterator 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 *ERC20TokenStakingManagerInitialValidatorCreatedIterator) Next() bool { +func (it *ERC20TokenStakingManagerDelegatorAddedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1940,7 +2017,7 @@ func (it *ERC20TokenStakingManagerInitialValidatorCreatedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerInitialValidatorCreated) + it.Event = new(ERC20TokenStakingManagerDelegatorAdded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1955,7 +2032,7 @@ func (it *ERC20TokenStakingManagerInitialValidatorCreatedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerInitialValidatorCreated) + it.Event = new(ERC20TokenStakingManagerDelegatorAdded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1971,53 +2048,73 @@ func (it *ERC20TokenStakingManagerInitialValidatorCreatedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerInitialValidatorCreatedIterator) Error() error { +func (it *ERC20TokenStakingManagerDelegatorAddedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerInitialValidatorCreatedIterator) Close() error { +func (it *ERC20TokenStakingManagerDelegatorAddedIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerInitialValidatorCreated represents a InitialValidatorCreated event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerInitialValidatorCreated struct { - ValidationID [32]byte - Weight uint64 - NodeID []byte - Raw types.Log // Blockchain specific contextual infos +// 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 } -// FilterInitialValidatorCreated is a free log retrieval operation binding the contract event 0xd80a750132c7a4fb67e226bdfecab0d8609bbb4e48cdad62cee218f25b758fff. +// FilterDelegatorAdded is a free log retrieval operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. // -// Solidity: event InitialValidatorCreated(bytes32 indexed validationID, uint64 weight, bytes nodeID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterInitialValidatorCreated(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerInitialValidatorCreatedIterator, error) { +// 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) { + 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, "InitialValidatorCreated", validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "DelegatorAdded", delegationIDRule, validationIDRule, delegatorAddressRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerInitialValidatorCreatedIterator{contract: _ERC20TokenStakingManager.contract, event: "InitialValidatorCreated", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerDelegatorAddedIterator{contract: _ERC20TokenStakingManager.contract, event: "DelegatorAdded", logs: logs, sub: sub}, nil } -// WatchInitialValidatorCreated is a free log subscription operation binding the contract event 0xd80a750132c7a4fb67e226bdfecab0d8609bbb4e48cdad62cee218f25b758fff. +// WatchDelegatorAdded is a free log subscription operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. // -// Solidity: event InitialValidatorCreated(bytes32 indexed validationID, uint64 weight, bytes nodeID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitialValidatorCreated(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerInitialValidatorCreated, validationID [][32]byte) (event.Subscription, error) { +// 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) { + 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, "InitialValidatorCreated", validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "DelegatorAdded", delegationIDRule, validationIDRule, delegatorAddressRule) if err != nil { return nil, err } @@ -2027,8 +2124,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitialV select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerInitialValidatorCreated) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "InitialValidatorCreated", log); err != nil { + event := new(ERC20TokenStakingManagerDelegatorAdded) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegatorAdded", log); err != nil { return err } event.Raw = log @@ -2049,21 +2146,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitialV }), nil } -// ParseInitialValidatorCreated is a log parse operation binding the contract event 0xd80a750132c7a4fb67e226bdfecab0d8609bbb4e48cdad62cee218f25b758fff. +// ParseDelegatorAdded is a log parse operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. // -// Solidity: event InitialValidatorCreated(bytes32 indexed validationID, uint64 weight, bytes nodeID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseInitialValidatorCreated(log types.Log) (*ERC20TokenStakingManagerInitialValidatorCreated, error) { - event := new(ERC20TokenStakingManagerInitialValidatorCreated) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "InitialValidatorCreated", log); err != nil { +// 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 { 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 +// 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 contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -2077,7 +2174,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 *ERC20TokenStakingManagerDelegatorRegisteredIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2086,7 +2183,7 @@ func (it *ERC20TokenStakingManagerInitializedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerInitialized) + it.Event = new(ERC20TokenStakingManagerDelegatorRegistered) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2101,7 +2198,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(ERC20TokenStakingManagerDelegatorRegistered) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2117,41 +2214,61 @@ func (it *ERC20TokenStakingManagerInitializedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerInitializedIterator) Error() error { +func (it *ERC20TokenStakingManagerDelegatorRegisteredIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerInitializedIterator) Close() error { +func (it *ERC20TokenStakingManagerDelegatorRegisteredIterator) 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 +// 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 } -// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// FilterDelegatorRegistered is a free log retrieval operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. // -// Solidity: event Initialized(uint64 version) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterInitialized(opts *bind.FilterOpts) (*ERC20TokenStakingManagerInitializedIterator, error) { +// 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) { - 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, "DelegatorRegistered", delegationIDRule, validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerInitializedIterator{contract: _ERC20TokenStakingManager.contract, event: "Initialized", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerDelegatorRegisteredIterator{contract: _ERC20TokenStakingManager.contract, event: "DelegatorRegistered", logs: logs, sub: sub}, nil } -// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// WatchDelegatorRegistered is a free log subscription operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. // -// Solidity: event Initialized(uint64 version) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerInitialized) (event.Subscription, error) { +// 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) { - 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, "DelegatorRegistered", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -2161,8 +2278,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(ERC20TokenStakingManagerDelegatorRegistered) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegatorRegistered", log); err != nil { return err } event.Raw = log @@ -2183,21 +2300,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitiali }), nil } -// ParseInitialized is a log parse operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// ParseDelegatorRegistered is a log parse operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. // -// 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 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 { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerUptimeUpdatedIterator is returned from FilterUptimeUpdated and is used to iterate over the raw logs and unpacked data for UptimeUpdated events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerUptimeUpdatedIterator struct { - Event *ERC20TokenStakingManagerUptimeUpdated // Event containing the contract specifics and raw log +// 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 contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -2211,7 +2328,7 @@ type ERC20TokenStakingManagerUptimeUpdatedIterator 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 *ERC20TokenStakingManagerUptimeUpdatedIterator) Next() bool { +func (it *ERC20TokenStakingManagerDelegatorRemovalInitializedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2220,7 +2337,7 @@ func (it *ERC20TokenStakingManagerUptimeUpdatedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerUptimeUpdated) + it.Event = new(ERC20TokenStakingManagerDelegatorRemovalInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2235,7 +2352,7 @@ func (it *ERC20TokenStakingManagerUptimeUpdatedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerUptimeUpdated) + it.Event = new(ERC20TokenStakingManagerDelegatorRemovalInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2251,52 +2368,60 @@ func (it *ERC20TokenStakingManagerUptimeUpdatedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerUptimeUpdatedIterator) Error() error { +func (it *ERC20TokenStakingManagerDelegatorRemovalInitializedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerUptimeUpdatedIterator) Close() error { +func (it *ERC20TokenStakingManagerDelegatorRemovalInitializedIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerUptimeUpdated represents a UptimeUpdated event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerUptimeUpdated struct { +// ERC20TokenStakingManagerDelegatorRemovalInitialized represents a DelegatorRemovalInitialized event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerDelegatorRemovalInitialized struct { + DelegationID [32]byte ValidationID [32]byte - Uptime uint64 Raw types.Log // Blockchain specific contextual infos } -// FilterUptimeUpdated is a free log retrieval operation binding the contract event 0xec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435. +// FilterDelegatorRemovalInitialized is a free log retrieval operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. // -// Solidity: event UptimeUpdated(bytes32 indexed validationID, uint64 uptime) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterUptimeUpdated(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerUptimeUpdatedIterator, error) { +// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterDelegatorRemovalInitialized(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*ERC20TokenStakingManagerDelegatorRemovalInitializedIterator, 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, "UptimeUpdated", validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerUptimeUpdatedIterator{contract: _ERC20TokenStakingManager.contract, event: "UptimeUpdated", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerDelegatorRemovalInitializedIterator{contract: _ERC20TokenStakingManager.contract, event: "DelegatorRemovalInitialized", logs: logs, sub: sub}, nil } -// WatchUptimeUpdated is a free log subscription operation binding the contract event 0xec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435. +// WatchDelegatorRemovalInitialized is a free log subscription operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. // -// Solidity: event UptimeUpdated(bytes32 indexed validationID, uint64 uptime) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchUptimeUpdated(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerUptimeUpdated, validationID [][32]byte) (event.Subscription, error) { +// 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) { + 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, "UptimeUpdated", validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -2306,8 +2431,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchUptimeUp select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerUptimeUpdated) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "UptimeUpdated", log); err != nil { + event := new(ERC20TokenStakingManagerDelegatorRemovalInitialized) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegatorRemovalInitialized", log); err != nil { return err } event.Raw = log @@ -2328,21 +2453,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchUptimeUp }), nil } -// ParseUptimeUpdated is a log parse operation binding the contract event 0xec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435. +// ParseDelegatorRemovalInitialized is a log parse operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. // -// Solidity: event UptimeUpdated(bytes32 indexed validationID, uint64 uptime) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseUptimeUpdated(log types.Log) (*ERC20TokenStakingManagerUptimeUpdated, error) { - event := new(ERC20TokenStakingManagerUptimeUpdated) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "UptimeUpdated", log); err != nil { +// 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 { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerValidationPeriodCreatedIterator is returned from FilterValidationPeriodCreated and is used to iterate over the raw logs and unpacked data for ValidationPeriodCreated events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerValidationPeriodCreatedIterator struct { - Event *ERC20TokenStakingManagerValidationPeriodCreated // 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 @@ -2356,7 +2481,7 @@ type ERC20TokenStakingManagerValidationPeriodCreatedIterator 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 *ERC20TokenStakingManagerValidationPeriodCreatedIterator) Next() bool { +func (it *ERC20TokenStakingManagerInitializedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2365,7 +2490,7 @@ func (it *ERC20TokenStakingManagerValidationPeriodCreatedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerValidationPeriodCreated) + it.Event = new(ERC20TokenStakingManagerInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2380,7 +2505,7 @@ func (it *ERC20TokenStakingManagerValidationPeriodCreatedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerValidationPeriodCreated) + it.Event = new(ERC20TokenStakingManagerInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2396,63 +2521,197 @@ func (it *ERC20TokenStakingManagerValidationPeriodCreatedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerValidationPeriodCreatedIterator) Error() error { +func (it *ERC20TokenStakingManagerInitializedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerValidationPeriodCreatedIterator) Close() error { +func (it *ERC20TokenStakingManagerInitializedIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerValidationPeriodCreated represents a ValidationPeriodCreated event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerValidationPeriodCreated struct { - ValidationID [32]byte - RegisterValidationMessageID [32]byte - Weight uint64 - NodeID []byte - RegistrationExpiry uint64 - 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 } -// FilterValidationPeriodCreated is a free log retrieval operation binding the contract event 0xe093cab27f3fc60439e008f3a2073310d3ac9ac9b7d59e53a06b2588f7498bd6. +// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. // -// Solidity: event ValidationPeriodCreated(bytes32 indexed validationID, bytes32 indexed registerValidationMessageID, uint64 weight, bytes nodeID, uint64 registrationExpiry) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterValidationPeriodCreated(opts *bind.FilterOpts, validationID [][32]byte, registerValidationMessageID [][32]byte) (*ERC20TokenStakingManagerValidationPeriodCreatedIterator, error) { +// Solidity: event Initialized(uint64 version) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterInitialized(opts *bind.FilterOpts) (*ERC20TokenStakingManagerInitializedIterator, error) { + + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &ERC20TokenStakingManagerInitializedIterator{contract: _ERC20TokenStakingManager.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// 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, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20TokenStakingManagerInitialized) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitialized is a log parse operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// 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 +} + +// ERC20TokenStakingManagerInitiatedValidatorRegistrationIterator is returned from FilterInitiatedValidatorRegistration and is used to iterate over the raw logs and unpacked data for InitiatedValidatorRegistration events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerInitiatedValidatorRegistrationIterator struct { + Event *ERC20TokenStakingManagerInitiatedValidatorRegistration // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20TokenStakingManagerInitiatedValidatorRegistrationIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20TokenStakingManagerInitiatedValidatorRegistration) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20TokenStakingManagerInitiatedValidatorRegistration) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20TokenStakingManagerInitiatedValidatorRegistrationIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20TokenStakingManagerInitiatedValidatorRegistrationIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20TokenStakingManagerInitiatedValidatorRegistration represents a InitiatedValidatorRegistration event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerInitiatedValidatorRegistration struct { + ValidationID [32]byte + NodeID [20]byte + RegistrationMessageID [32]byte + RegistrationExpiry uint64 + Weight uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitiatedValidatorRegistration is a free log retrieval operation binding the contract event 0x5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d. +// +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes20 indexed nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterInitiatedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte, nodeID [][20]byte) (*ERC20TokenStakingManagerInitiatedValidatorRegistrationIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var registerValidationMessageIDRule []interface{} - for _, registerValidationMessageIDItem := range registerValidationMessageID { - registerValidationMessageIDRule = append(registerValidationMessageIDRule, registerValidationMessageIDItem) + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "ValidationPeriodCreated", validationIDRule, registerValidationMessageIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "InitiatedValidatorRegistration", validationIDRule, nodeIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerValidationPeriodCreatedIterator{contract: _ERC20TokenStakingManager.contract, event: "ValidationPeriodCreated", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerInitiatedValidatorRegistrationIterator{contract: _ERC20TokenStakingManager.contract, event: "InitiatedValidatorRegistration", logs: logs, sub: sub}, nil } -// WatchValidationPeriodCreated is a free log subscription operation binding the contract event 0xe093cab27f3fc60439e008f3a2073310d3ac9ac9b7d59e53a06b2588f7498bd6. +// WatchInitiatedValidatorRegistration is a free log subscription operation binding the contract event 0x5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d. // -// Solidity: event ValidationPeriodCreated(bytes32 indexed validationID, bytes32 indexed registerValidationMessageID, uint64 weight, bytes nodeID, uint64 registrationExpiry) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidationPeriodCreated(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerValidationPeriodCreated, validationID [][32]byte, registerValidationMessageID [][32]byte) (event.Subscription, error) { +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes20 indexed nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitiatedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerInitiatedValidatorRegistration, validationID [][32]byte, nodeID [][20]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var registerValidationMessageIDRule []interface{} - for _, registerValidationMessageIDItem := range registerValidationMessageID { - registerValidationMessageIDRule = append(registerValidationMessageIDRule, registerValidationMessageIDItem) + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "ValidationPeriodCreated", validationIDRule, registerValidationMessageIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "InitiatedValidatorRegistration", validationIDRule, nodeIDRule) if err != nil { return nil, err } @@ -2462,8 +2721,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidati select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerValidationPeriodCreated) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "ValidationPeriodCreated", log); err != nil { + event := new(ERC20TokenStakingManagerInitiatedValidatorRegistration) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "InitiatedValidatorRegistration", log); err != nil { return err } event.Raw = log @@ -2484,21 +2743,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidati }), nil } -// ParseValidationPeriodCreated is a log parse operation binding the contract event 0xe093cab27f3fc60439e008f3a2073310d3ac9ac9b7d59e53a06b2588f7498bd6. +// ParseInitiatedValidatorRegistration is a log parse operation binding the contract event 0x5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d. // -// Solidity: event ValidationPeriodCreated(bytes32 indexed validationID, bytes32 indexed registerValidationMessageID, uint64 weight, bytes nodeID, uint64 registrationExpiry) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseValidationPeriodCreated(log types.Log) (*ERC20TokenStakingManagerValidationPeriodCreated, error) { - event := new(ERC20TokenStakingManagerValidationPeriodCreated) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "ValidationPeriodCreated", log); err != nil { +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes20 indexed nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseInitiatedValidatorRegistration(log types.Log) (*ERC20TokenStakingManagerInitiatedValidatorRegistration, error) { + event := new(ERC20TokenStakingManagerInitiatedValidatorRegistration) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "InitiatedValidatorRegistration", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerValidationPeriodEndedIterator is returned from FilterValidationPeriodEnded and is used to iterate over the raw logs and unpacked data for ValidationPeriodEnded events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerValidationPeriodEndedIterator struct { - Event *ERC20TokenStakingManagerValidationPeriodEnded // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerInitiatedValidatorRemovalIterator is returned from FilterInitiatedValidatorRemoval and is used to iterate over the raw logs and unpacked data for InitiatedValidatorRemoval events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerInitiatedValidatorRemovalIterator struct { + Event *ERC20TokenStakingManagerInitiatedValidatorRemoval // 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 @@ -2512,7 +2771,7 @@ type ERC20TokenStakingManagerValidationPeriodEndedIterator 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 *ERC20TokenStakingManagerValidationPeriodEndedIterator) Next() bool { +func (it *ERC20TokenStakingManagerInitiatedValidatorRemovalIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2521,7 +2780,7 @@ func (it *ERC20TokenStakingManagerValidationPeriodEndedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerValidationPeriodEnded) + it.Event = new(ERC20TokenStakingManagerInitiatedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2536,7 +2795,7 @@ func (it *ERC20TokenStakingManagerValidationPeriodEndedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerValidationPeriodEnded) + it.Event = new(ERC20TokenStakingManagerInitiatedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2552,60 +2811,54 @@ func (it *ERC20TokenStakingManagerValidationPeriodEndedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerValidationPeriodEndedIterator) Error() error { +func (it *ERC20TokenStakingManagerInitiatedValidatorRemovalIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerValidationPeriodEndedIterator) Close() error { +func (it *ERC20TokenStakingManagerInitiatedValidatorRemovalIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerValidationPeriodEnded represents a ValidationPeriodEnded event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerValidationPeriodEnded struct { - ValidationID [32]byte - Status uint8 - Raw types.Log // Blockchain specific contextual infos +// ERC20TokenStakingManagerInitiatedValidatorRemoval represents a InitiatedValidatorRemoval event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerInitiatedValidatorRemoval struct { + ValidationID [32]byte + ValidatorWeightMessageID [32]byte + Weight uint64 + EndTime uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterValidationPeriodEnded is a free log retrieval operation binding the contract event 0x1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16. +// FilterInitiatedValidatorRemoval is a free log retrieval operation binding the contract event 0xbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273. // -// Solidity: event ValidationPeriodEnded(bytes32 indexed validationID, uint8 indexed status) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterValidationPeriodEnded(opts *bind.FilterOpts, validationID [][32]byte, status []uint8) (*ERC20TokenStakingManagerValidationPeriodEndedIterator, error) { +// Solidity: event InitiatedValidatorRemoval(bytes32 indexed validationID, bytes32 validatorWeightMessageID, uint64 weight, uint64 endTime) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterInitiatedValidatorRemoval(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerInitiatedValidatorRemovalIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var statusRule []interface{} - for _, statusItem := range status { - statusRule = append(statusRule, statusItem) - } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "ValidationPeriodEnded", validationIDRule, statusRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "InitiatedValidatorRemoval", validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerValidationPeriodEndedIterator{contract: _ERC20TokenStakingManager.contract, event: "ValidationPeriodEnded", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerInitiatedValidatorRemovalIterator{contract: _ERC20TokenStakingManager.contract, event: "InitiatedValidatorRemoval", logs: logs, sub: sub}, nil } -// WatchValidationPeriodEnded is a free log subscription operation binding the contract event 0x1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16. +// WatchInitiatedValidatorRemoval is a free log subscription operation binding the contract event 0xbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273. // -// Solidity: event ValidationPeriodEnded(bytes32 indexed validationID, uint8 indexed status) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidationPeriodEnded(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerValidationPeriodEnded, validationID [][32]byte, status []uint8) (event.Subscription, error) { +// Solidity: event InitiatedValidatorRemoval(bytes32 indexed validationID, bytes32 validatorWeightMessageID, uint64 weight, uint64 endTime) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitiatedValidatorRemoval(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerInitiatedValidatorRemoval, validationID [][32]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var statusRule []interface{} - for _, statusItem := range status { - statusRule = append(statusRule, statusItem) - } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "ValidationPeriodEnded", validationIDRule, statusRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "InitiatedValidatorRemoval", validationIDRule) if err != nil { return nil, err } @@ -2615,8 +2868,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidati select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerValidationPeriodEnded) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "ValidationPeriodEnded", log); err != nil { + event := new(ERC20TokenStakingManagerInitiatedValidatorRemoval) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "InitiatedValidatorRemoval", log); err != nil { return err } event.Raw = log @@ -2637,21 +2890,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidati }), nil } -// ParseValidationPeriodEnded is a log parse operation binding the contract event 0x1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16. +// ParseInitiatedValidatorRemoval is a log parse operation binding the contract event 0xbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273. // -// Solidity: event ValidationPeriodEnded(bytes32 indexed validationID, uint8 indexed status) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseValidationPeriodEnded(log types.Log) (*ERC20TokenStakingManagerValidationPeriodEnded, error) { - event := new(ERC20TokenStakingManagerValidationPeriodEnded) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "ValidationPeriodEnded", log); err != nil { +// Solidity: event InitiatedValidatorRemoval(bytes32 indexed validationID, bytes32 validatorWeightMessageID, uint64 weight, uint64 endTime) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseInitiatedValidatorRemoval(log types.Log) (*ERC20TokenStakingManagerInitiatedValidatorRemoval, error) { + event := new(ERC20TokenStakingManagerInitiatedValidatorRemoval) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "InitiatedValidatorRemoval", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerValidationPeriodRegisteredIterator is returned from FilterValidationPeriodRegistered and is used to iterate over the raw logs and unpacked data for ValidationPeriodRegistered events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerValidationPeriodRegisteredIterator struct { - Event *ERC20TokenStakingManagerValidationPeriodRegistered // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerInitiatedValidatorWeightUpdateIterator is returned from FilterInitiatedValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for InitiatedValidatorWeightUpdate events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerInitiatedValidatorWeightUpdateIterator struct { + Event *ERC20TokenStakingManagerInitiatedValidatorWeightUpdate // 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 @@ -2665,7 +2918,7 @@ type ERC20TokenStakingManagerValidationPeriodRegisteredIterator 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 *ERC20TokenStakingManagerValidationPeriodRegisteredIterator) Next() bool { +func (it *ERC20TokenStakingManagerInitiatedValidatorWeightUpdateIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2674,7 +2927,7 @@ func (it *ERC20TokenStakingManagerValidationPeriodRegisteredIterator) Next() boo if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerValidationPeriodRegistered) + it.Event = new(ERC20TokenStakingManagerInitiatedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2689,7 +2942,7 @@ func (it *ERC20TokenStakingManagerValidationPeriodRegisteredIterator) Next() boo // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerValidationPeriodRegistered) + it.Event = new(ERC20TokenStakingManagerInitiatedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2705,53 +2958,54 @@ func (it *ERC20TokenStakingManagerValidationPeriodRegisteredIterator) Next() boo } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerValidationPeriodRegisteredIterator) Error() error { +func (it *ERC20TokenStakingManagerInitiatedValidatorWeightUpdateIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerValidationPeriodRegisteredIterator) Close() error { +func (it *ERC20TokenStakingManagerInitiatedValidatorWeightUpdateIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerValidationPeriodRegistered represents a ValidationPeriodRegistered event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerValidationPeriodRegistered struct { - ValidationID [32]byte - Weight uint64 - Timestamp *big.Int - Raw types.Log // Blockchain specific contextual infos +// ERC20TokenStakingManagerInitiatedValidatorWeightUpdate represents a InitiatedValidatorWeightUpdate event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerInitiatedValidatorWeightUpdate struct { + ValidationID [32]byte + Nonce uint64 + WeightUpdateMessageID [32]byte + Weight uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterValidationPeriodRegistered is a free log retrieval operation binding the contract event 0x8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b. +// FilterInitiatedValidatorWeightUpdate is a free log retrieval operation binding the contract event 0x6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d3. // -// Solidity: event ValidationPeriodRegistered(bytes32 indexed validationID, uint64 weight, uint256 timestamp) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterValidationPeriodRegistered(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerValidationPeriodRegisteredIterator, error) { +// Solidity: event InitiatedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, bytes32 weightUpdateMessageID, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterInitiatedValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerInitiatedValidatorWeightUpdateIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "ValidationPeriodRegistered", validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "InitiatedValidatorWeightUpdate", validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerValidationPeriodRegisteredIterator{contract: _ERC20TokenStakingManager.contract, event: "ValidationPeriodRegistered", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerInitiatedValidatorWeightUpdateIterator{contract: _ERC20TokenStakingManager.contract, event: "InitiatedValidatorWeightUpdate", logs: logs, sub: sub}, nil } -// WatchValidationPeriodRegistered is a free log subscription operation binding the contract event 0x8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b. +// WatchInitiatedValidatorWeightUpdate is a free log subscription operation binding the contract event 0x6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d3. // -// Solidity: event ValidationPeriodRegistered(bytes32 indexed validationID, uint64 weight, uint256 timestamp) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidationPeriodRegistered(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerValidationPeriodRegistered, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event InitiatedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, bytes32 weightUpdateMessageID, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitiatedValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerInitiatedValidatorWeightUpdate, validationID [][32]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "ValidationPeriodRegistered", validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "InitiatedValidatorWeightUpdate", validationIDRule) if err != nil { return nil, err } @@ -2761,8 +3015,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidati select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerValidationPeriodRegistered) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "ValidationPeriodRegistered", log); err != nil { + event := new(ERC20TokenStakingManagerInitiatedValidatorWeightUpdate) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "InitiatedValidatorWeightUpdate", log); err != nil { return err } event.Raw = log @@ -2783,21 +3037,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidati }), nil } -// ParseValidationPeriodRegistered is a log parse operation binding the contract event 0x8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b. +// ParseInitiatedValidatorWeightUpdate is a log parse operation binding the contract event 0x6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d3. // -// Solidity: event ValidationPeriodRegistered(bytes32 indexed validationID, uint64 weight, uint256 timestamp) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseValidationPeriodRegistered(log types.Log) (*ERC20TokenStakingManagerValidationPeriodRegistered, error) { - event := new(ERC20TokenStakingManagerValidationPeriodRegistered) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "ValidationPeriodRegistered", log); err != nil { +// Solidity: event InitiatedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, bytes32 weightUpdateMessageID, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseInitiatedValidatorWeightUpdate(log types.Log) (*ERC20TokenStakingManagerInitiatedValidatorWeightUpdate, error) { + event := new(ERC20TokenStakingManagerInitiatedValidatorWeightUpdate) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "InitiatedValidatorWeightUpdate", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerValidatorRemovalInitializedIterator is returned from FilterValidatorRemovalInitialized and is used to iterate over the raw logs and unpacked data for ValidatorRemovalInitialized events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerValidatorRemovalInitializedIterator struct { - Event *ERC20TokenStakingManagerValidatorRemovalInitialized // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerRegisteredInitialValidatorIterator is returned from FilterRegisteredInitialValidator and is used to iterate over the raw logs and unpacked data for RegisteredInitialValidator events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerRegisteredInitialValidatorIterator struct { + Event *ERC20TokenStakingManagerRegisteredInitialValidator // 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 @@ -2811,7 +3065,7 @@ type ERC20TokenStakingManagerValidatorRemovalInitializedIterator 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 *ERC20TokenStakingManagerValidatorRemovalInitializedIterator) Next() bool { +func (it *ERC20TokenStakingManagerRegisteredInitialValidatorIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2820,7 +3074,7 @@ func (it *ERC20TokenStakingManagerValidatorRemovalInitializedIterator) Next() bo if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerValidatorRemovalInitialized) + it.Event = new(ERC20TokenStakingManagerRegisteredInitialValidator) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2835,7 +3089,7 @@ func (it *ERC20TokenStakingManagerValidatorRemovalInitializedIterator) Next() bo // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerValidatorRemovalInitialized) + it.Event = new(ERC20TokenStakingManagerRegisteredInitialValidator) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2851,62 +3105,61 @@ func (it *ERC20TokenStakingManagerValidatorRemovalInitializedIterator) Next() bo } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerValidatorRemovalInitializedIterator) Error() error { +func (it *ERC20TokenStakingManagerRegisteredInitialValidatorIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerValidatorRemovalInitializedIterator) Close() error { +func (it *ERC20TokenStakingManagerRegisteredInitialValidatorIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerValidatorRemovalInitialized represents a ValidatorRemovalInitialized event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerValidatorRemovalInitialized struct { - ValidationID [32]byte - SetWeightMessageID [32]byte - Weight uint64 - EndTime *big.Int - Raw types.Log // Blockchain specific contextual infos +// ERC20TokenStakingManagerRegisteredInitialValidator represents a RegisteredInitialValidator event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerRegisteredInitialValidator struct { + ValidationID [32]byte + NodeID [20]byte + Weight uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterValidatorRemovalInitialized is a free log retrieval operation binding the contract event 0xfbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42. +// FilterRegisteredInitialValidator is a free log retrieval operation binding the contract event 0x9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d7. // -// Solidity: event ValidatorRemovalInitialized(bytes32 indexed validationID, bytes32 indexed setWeightMessageID, uint64 weight, uint256 endTime) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterValidatorRemovalInitialized(opts *bind.FilterOpts, validationID [][32]byte, setWeightMessageID [][32]byte) (*ERC20TokenStakingManagerValidatorRemovalInitializedIterator, error) { +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterRegisteredInitialValidator(opts *bind.FilterOpts, validationID [][32]byte, nodeID [][20]byte) (*ERC20TokenStakingManagerRegisteredInitialValidatorIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var setWeightMessageIDRule []interface{} - for _, setWeightMessageIDItem := range setWeightMessageID { - setWeightMessageIDRule = append(setWeightMessageIDRule, setWeightMessageIDItem) + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "ValidatorRemovalInitialized", validationIDRule, setWeightMessageIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "RegisteredInitialValidator", validationIDRule, nodeIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerValidatorRemovalInitializedIterator{contract: _ERC20TokenStakingManager.contract, event: "ValidatorRemovalInitialized", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerRegisteredInitialValidatorIterator{contract: _ERC20TokenStakingManager.contract, event: "RegisteredInitialValidator", logs: logs, sub: sub}, nil } -// WatchValidatorRemovalInitialized is a free log subscription operation binding the contract event 0xfbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42. +// WatchRegisteredInitialValidator is a free log subscription operation binding the contract event 0x9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d7. // -// Solidity: event ValidatorRemovalInitialized(bytes32 indexed validationID, bytes32 indexed setWeightMessageID, uint64 weight, uint256 endTime) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidatorRemovalInitialized(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerValidatorRemovalInitialized, validationID [][32]byte, setWeightMessageID [][32]byte) (event.Subscription, error) { +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchRegisteredInitialValidator(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerRegisteredInitialValidator, validationID [][32]byte, nodeID [][20]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var setWeightMessageIDRule []interface{} - for _, setWeightMessageIDItem := range setWeightMessageID { - setWeightMessageIDRule = append(setWeightMessageIDRule, setWeightMessageIDItem) + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "ValidatorRemovalInitialized", validationIDRule, setWeightMessageIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "RegisteredInitialValidator", validationIDRule, nodeIDRule) if err != nil { return nil, err } @@ -2916,8 +3169,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidato select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerValidatorRemovalInitialized) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "ValidatorRemovalInitialized", log); err != nil { + event := new(ERC20TokenStakingManagerRegisteredInitialValidator) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "RegisteredInitialValidator", log); err != nil { return err } event.Raw = log @@ -2938,21 +3191,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidato }), nil } -// ParseValidatorRemovalInitialized is a log parse operation binding the contract event 0xfbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42. +// ParseRegisteredInitialValidator is a log parse operation binding the contract event 0x9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d7. // -// Solidity: event ValidatorRemovalInitialized(bytes32 indexed validationID, bytes32 indexed setWeightMessageID, uint64 weight, uint256 endTime) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseValidatorRemovalInitialized(log types.Log) (*ERC20TokenStakingManagerValidatorRemovalInitialized, error) { - event := new(ERC20TokenStakingManagerValidatorRemovalInitialized) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "ValidatorRemovalInitialized", log); err != nil { +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseRegisteredInitialValidator(log types.Log) (*ERC20TokenStakingManagerRegisteredInitialValidator, error) { + event := new(ERC20TokenStakingManagerRegisteredInitialValidator) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "RegisteredInitialValidator", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerValidatorWeightUpdateIterator is returned from FilterValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for ValidatorWeightUpdate events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerValidatorWeightUpdateIterator struct { - Event *ERC20TokenStakingManagerValidatorWeightUpdate // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerUptimeUpdatedIterator is returned from FilterUptimeUpdated and is used to iterate over the raw logs and unpacked data for UptimeUpdated events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerUptimeUpdatedIterator struct { + Event *ERC20TokenStakingManagerUptimeUpdated // 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 @@ -2966,7 +3219,7 @@ type ERC20TokenStakingManagerValidatorWeightUpdateIterator 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 *ERC20TokenStakingManagerValidatorWeightUpdateIterator) Next() bool { +func (it *ERC20TokenStakingManagerUptimeUpdatedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2975,7 +3228,7 @@ func (it *ERC20TokenStakingManagerValidatorWeightUpdateIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerValidatorWeightUpdate) + it.Event = new(ERC20TokenStakingManagerUptimeUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2990,7 +3243,7 @@ func (it *ERC20TokenStakingManagerValidatorWeightUpdateIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerValidatorWeightUpdate) + it.Event = new(ERC20TokenStakingManagerUptimeUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3006,62 +3259,52 @@ func (it *ERC20TokenStakingManagerValidatorWeightUpdateIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerValidatorWeightUpdateIterator) Error() error { +func (it *ERC20TokenStakingManagerUptimeUpdatedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerValidatorWeightUpdateIterator) Close() error { +func (it *ERC20TokenStakingManagerUptimeUpdatedIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerValidatorWeightUpdate represents a ValidatorWeightUpdate event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerValidatorWeightUpdate struct { - ValidationID [32]byte - Nonce uint64 - Weight uint64 - SetWeightMessageID [32]byte - Raw types.Log // Blockchain specific contextual infos +// ERC20TokenStakingManagerUptimeUpdated represents a UptimeUpdated event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerUptimeUpdated struct { + ValidationID [32]byte + Uptime uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterValidatorWeightUpdate is a free log retrieval operation binding the contract event 0x07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df. +// FilterUptimeUpdated is a free log retrieval operation binding the contract event 0xec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435. // -// Solidity: event ValidatorWeightUpdate(bytes32 indexed validationID, uint64 indexed nonce, uint64 weight, bytes32 setWeightMessageID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte, nonce []uint64) (*ERC20TokenStakingManagerValidatorWeightUpdateIterator, error) { +// Solidity: event UptimeUpdated(bytes32 indexed validationID, uint64 uptime) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterUptimeUpdated(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerUptimeUpdatedIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var nonceRule []interface{} - for _, nonceItem := range nonce { - nonceRule = append(nonceRule, nonceItem) - } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "ValidatorWeightUpdate", validationIDRule, nonceRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "UptimeUpdated", validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerValidatorWeightUpdateIterator{contract: _ERC20TokenStakingManager.contract, event: "ValidatorWeightUpdate", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerUptimeUpdatedIterator{contract: _ERC20TokenStakingManager.contract, event: "UptimeUpdated", logs: logs, sub: sub}, nil } -// WatchValidatorWeightUpdate is a free log subscription operation binding the contract event 0x07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df. +// WatchUptimeUpdated is a free log subscription operation binding the contract event 0xec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435. // -// Solidity: event ValidatorWeightUpdate(bytes32 indexed validationID, uint64 indexed nonce, uint64 weight, bytes32 setWeightMessageID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerValidatorWeightUpdate, validationID [][32]byte, nonce []uint64) (event.Subscription, error) { +// Solidity: event UptimeUpdated(bytes32 indexed validationID, uint64 uptime) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchUptimeUpdated(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerUptimeUpdated, validationID [][32]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var nonceRule []interface{} - for _, nonceItem := range nonce { - nonceRule = append(nonceRule, nonceItem) - } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "ValidatorWeightUpdate", validationIDRule, nonceRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "UptimeUpdated", validationIDRule) if err != nil { return nil, err } @@ -3071,8 +3314,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidato select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerValidatorWeightUpdate) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "ValidatorWeightUpdate", log); err != nil { + event := new(ERC20TokenStakingManagerUptimeUpdated) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "UptimeUpdated", log); err != nil { return err } event.Raw = log @@ -3093,12 +3336,12 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidato }), nil } -// ParseValidatorWeightUpdate is a log parse operation binding the contract event 0x07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df. +// ParseUptimeUpdated is a log parse operation binding the contract event 0xec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435. // -// Solidity: event ValidatorWeightUpdate(bytes32 indexed validationID, uint64 indexed nonce, uint64 weight, bytes32 setWeightMessageID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseValidatorWeightUpdate(log types.Log) (*ERC20TokenStakingManagerValidatorWeightUpdate, error) { - event := new(ERC20TokenStakingManagerValidatorWeightUpdate) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "ValidatorWeightUpdate", log); err != nil { +// Solidity: event UptimeUpdated(bytes32 indexed validationID, uint64 uptime) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseUptimeUpdated(log types.Log) (*ERC20TokenStakingManagerUptimeUpdated, error) { + event := new(ERC20TokenStakingManagerUptimeUpdated) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "UptimeUpdated", log); err != nil { return nil, err } event.Raw = log @@ -3108,7 +3351,7 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseValidato // 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: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea26469706673582212207a0b6ee4bb75144dd6b8635b3883de8d9364507951a0e3d076ca36181dac9a1764736f6c63430008190033", + Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea2646970667358221220e6b22cfbb2dc3686c9e5d5c46b42e65620ca6777a1371e31c12b720ad3c60ea464736f6c63430008190033", } // ValidatorMessagesABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/ExampleRewardCalculator/ExampleRewardCalculator.go b/abi-bindings/go/validator-manager/ExampleRewardCalculator/ExampleRewardCalculator.go index 4f7edbbf1..ea7245dc2 100644 --- a/abi-bindings/go/validator-manager/ExampleRewardCalculator/ExampleRewardCalculator.go +++ b/abi-bindings/go/validator-manager/ExampleRewardCalculator/ExampleRewardCalculator.go @@ -32,7 +32,7 @@ var ( // ExampleRewardCalculatorMetaData contains all meta data concerning the ExampleRewardCalculator contract. var ExampleRewardCalculatorMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"rewardBasisPoints_\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SECONDS_IN_YEAR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPTIME_REWARDS_THRESHOLD_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"validatorStartTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"stakingStartTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"stakingEndTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"uptimeSeconds\",\"type\":\"uint64\"}],\"name\":\"calculateReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardBasisPoints\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a0604052348015600e575f80fd5b50604051610393380380610393833981016040819052602b91603b565b6001600160401b03166080526066565b5f60208284031215604a575f80fd5b81516001600160401b0381168114605f575f80fd5b9392505050565b60805161030f6100845f395f818160c50152610161015261030f5ff3fe608060405234801561000f575f80fd5b5060043610610055575f3560e01c80634f22429f146100595780635dcc93911461007f578063a9778a7a1461008a578063afba878a146100a6578063bb65b242146100c0575b5f80fd5b61006c6100673660046101db565b610100565b6040519081526020015b60405180910390f35b61006c6301e1338081565b61009361271081565b60405161ffff9091168152602001610076565b6100ae605081565b60405160ff9091168152602001610076565b6100e77f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610076565b5f605061010d8685610249565b6101179190610271565b67ffffffffffffffff1661012c836064610271565b67ffffffffffffffff16101561014357505f6101b6565b6127106301e133806101558686610249565b67ffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1689610195919061029d565b61019f919061029d565b6101a991906102ba565b6101b391906102ba565b90505b95945050505050565b803567ffffffffffffffff811681146101d6575f80fd5b919050565b5f805f805f60a086880312156101ef575f80fd5b853594506101ff602087016101bf565b935061020d604087016101bf565b925061021b606087016101bf565b9150610229608087016101bf565b90509295509295909350565b634e487b7160e01b5f52601160045260245ffd5b67ffffffffffffffff82811682821603908082111561026a5761026a610235565b5092915050565b67ffffffffffffffff81811683821602808216919082811461029557610295610235565b505092915050565b80820281158282048414176102b4576102b4610235565b92915050565b5f826102d457634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220a017f47278471e139b88da0cb4f0fedb8a1a5488085fabca75070c7dff9f008b64736f6c63430008190033", + Bin: "0x60a0604052348015600e575f80fd5b50604051610393380380610393833981016040819052602b91603b565b6001600160401b03166080526066565b5f60208284031215604a575f80fd5b81516001600160401b0381168114605f575f80fd5b9392505050565b60805161030f6100845f395f818160c50152610161015261030f5ff3fe608060405234801561000f575f80fd5b5060043610610055575f3560e01c80634f22429f146100595780635dcc93911461007f578063a9778a7a1461008a578063afba878a146100a6578063bb65b242146100c0575b5f80fd5b61006c6100673660046101db565b610100565b6040519081526020015b60405180910390f35b61006c6301e1338081565b61009361271081565b60405161ffff9091168152602001610076565b6100ae605081565b60405160ff9091168152602001610076565b6100e77f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610076565b5f605061010d8685610249565b6101179190610271565b67ffffffffffffffff1661012c836064610271565b67ffffffffffffffff16101561014357505f6101b6565b6127106301e133806101558686610249565b67ffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1689610195919061029d565b61019f919061029d565b6101a991906102ba565b6101b391906102ba565b90505b95945050505050565b803567ffffffffffffffff811681146101d6575f80fd5b919050565b5f805f805f60a086880312156101ef575f80fd5b853594506101ff602087016101bf565b935061020d604087016101bf565b925061021b606087016101bf565b9150610229608087016101bf565b90509295509295909350565b634e487b7160e01b5f52601160045260245ffd5b67ffffffffffffffff82811682821603908082111561026a5761026a610235565b5092915050565b67ffffffffffffffff81811683821602808216919082811461029557610295610235565b505092915050565b80820281158282048414176102b4576102b4610235565b92915050565b5f826102d457634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220467575851b25b46ed832838127e332426d4791271474cf5cbfe278df9044cc3364736f6c63430008190033", } // ExampleRewardCalculatorABI 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 5cf5857b7..ddebf48c8 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -68,10 +68,11 @@ type Validator struct { Status uint8 NodeID []byte StartingWeight uint64 - MessageNonce uint64 + SentNonce uint64 + ReceivedNonce uint64 Weight uint64 - StartedAt uint64 - EndedAt uint64 + StartTime uint64 + EndTime uint64 } // ValidatorManagerSettings is an auto generated low-level Go binding around an user-defined struct. @@ -103,8 +104,8 @@ 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\":\"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\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InitialValidatorCreated\",\"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\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"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\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"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\":\"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\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"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\":[{\"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\":[{\"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: "0x608060405234801561000f575f80fd5b50604051615c97380380615c9783398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615b4a8061014d5f395ff3fe608060405260043610610228575f3560e01c80637d8d2f7711610129578063b771b3bc116100a8578063c974d1b61161006d578063c974d1b614610666578063d5f20ff61461067a578063df93d8de146106a6578063fb8b11dd146106bc578063fd7ac5e7146106db575f80fd5b8063b771b3bc146105db578063ba3a4b97146105f5578063bc5fbfec14610614578063bee0a03f14610634578063c599e24f14610653575f80fd5b80639ae06447116100ee5780639ae0644714610557578063a3a65e4814610576578063a9778a7a1461037c578063af2f5feb14610595578063afb98096146105a8575f80fd5b80637d8d2f77146104c757806380dd672f146104e65780638280a25a146105055780638ef34c981461051957806393e2459814610538575f80fd5b806335455ded116101b557806360305d621161017a57806360305d621461042057806360ad7784146104495780636206585614610468578063732214f81461049557806376f78621146104a8575f80fd5b806335455ded1461037c57806337b9be8f146103a45780633a1cfff6146103c3578063467ef06f146103e25780635dd6a6cb14610401575f80fd5b80631ec44724116101fb5780631ec44724146102b657806320d91b7a146102d557806325e1c776146102f45780632e2194d814610313578063329c3e121461034a575f80fd5b80630118acc41461022c5780630322ed981461024d5780630ba512d11461026c578063151d30d11461028b575b5f80fd5b348015610237575f80fd5b5061024b610246366004614ac4565b6106fa565b005b348015610258575f80fd5b5061024b610267366004614aff565b61070b565b348015610277575f80fd5b5061024b610286366004614b16565b61099b565b348015610296575f80fd5b5061029f600a81565b60405160ff90911681526020015b60405180910390f35b3480156102c1575f80fd5b5061024b6102d0366004614ac4565b610a78565b3480156102e0575f80fd5b5061024b6102ef366004614b2d565b610a84565b3480156102ff575f80fd5b5061024b61030e366004614b7b565b611023565b34801561031e575f80fd5b5061033261032d366004614aff565b611097565b6040516001600160401b0390911681526020016102ad565b348015610355575f80fd5b506103646001600160991b0181565b6040516001600160a01b0390911681526020016102ad565b348015610387575f80fd5b5061039161271081565b60405161ffff90911681526020016102ad565b3480156103af575f80fd5b5061024b6103be366004614bb0565b6110eb565b3480156103ce575f80fd5b5061024b6103dd366004614ac4565b6110fe565b3480156103ed575f80fd5b5061024b6103fc366004614bfe565b61110a565b34801561040c575f80fd5b5061024b61041b366004614bb0565b6111dc565b34801561042b575f80fd5b50610434601481565b60405163ffffffff90911681526020016102ad565b348015610454575f80fd5b5061024b610463366004614b7b565b6111e8565b348015610473575f80fd5b50610487610482366004614c2b565b6114b0565b6040519081526020016102ad565b3480156104a0575f80fd5b506104875f81565b3480156104b3575f80fd5b5061024b6104c2366004614ac4565b6114d0565b3480156104d2575f80fd5b5061024b6104e1366004614bb0565b6114dc565b3480156104f1575f80fd5b5061024b610500366004614b7b565b6114e8565b348015610510575f80fd5b5061029f603081565b348015610524575f80fd5b5061024b610533366004614c46565b611722565b348015610543575f80fd5b5061024b610552366004614aff565b6117d3565b348015610562575f80fd5b5061024b610571366004614bb0565b611867565b348015610581575f80fd5b5061024b610590366004614bfe565b611873565b6104876105a3366004614c85565b611a69565b3480156105b3575f80fd5b506104877f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b3480156105e6575f80fd5b506103646005600160991b0181565b348015610600575f80fd5b5061024b61060f366004614aff565b611a9d565b34801561061f575f80fd5b506104875f80516020615ab583398151915281565b34801561063f575f80fd5b5061024b61064e366004614aff565b611cf6565b610487610661366004614aff565b611e32565b348015610671575f80fd5b5061029f601481565b348015610685575f80fd5b50610699610694366004614aff565b611e63565b6040516102ad9190614d5b565b3480156106b1575f80fd5b506103326202a30081565b3480156106c7575f80fd5b5061024b6106d6366004614c46565b611fb2565b3480156106e6575f80fd5b506104876106f5366004614ddb565b612049565b6107068383835f6120a4565b505050565b5f8181525f80516020615ad58339815191526020526040808220815160e0810190925280545f80516020615ab583398151915293929190829060ff16600581111561075857610758614ce6565b600581111561076957610769614ce6565b815260200160018201805461077d90614e46565b80601f01602080910402602001604051908101604052809291908181526020018280546107a990614e46565b80156107f45780601f106107cb576101008083540402835291602001916107f4565b820191905f5260205f20905b8154815290600101906020018083116107d757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561085f5761085f614ce6565b1461089b575f8381526005830160205260409081902054905163170cc93360e21b81526108929160ff1690600401614e78565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610912573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109399190810190614f81565b6040518263ffffffff1660e01b81526004016109559190614fb2565b6020604051808303815f875af1158015610971573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109959190614fc4565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff16806109e4575080546001600160401b03808416911610155b15610a025760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a2c836120d0565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6109958383835f6120e1565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f80516020615ab58339815191529060ff1615610ad657604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b19573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3d9190614fc4565b836020013514610b66576040516372b0a7e760e11b815260208401356004820152602401610892565b30610b776060850160408601614fdb565b6001600160a01b031614610bba57610b956060840160408501614fdb565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610892565b5f610bc86060850185614ff6565b905090505f805b828163ffffffff161015610e19575f610beb6060880188614ff6565b8363ffffffff16818110610c0157610c0161503b565b9050602002810190610c13919061504f565b610c1c906150ba565b80516040519192505f916006880191610c3491615135565b90815260200160405180910390205414610c6457805160405163a41f772f60e01b81526108929190600401614fb2565b5f6002885f013584604051602001610c9392919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610cad91615135565b602060405180830381855afa158015610cc8573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610ceb9190614fc4565b90508086600601835f0151604051610d039190615135565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610d43908261518a565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b039485166001600160c01b031990941693909317600160801b85851602176001600160c01b0316600160c01b429590951694909402939093179092556003909101805467ffffffffffffffff19169055610dc39085615259565b9350807fd80a750132c7a4fb67e226bdfecab0d8609bbb4e48cdad62cee218f25b758fff8360400151845f0151604051610dfe929190615279565b60405180910390a2505080610e129061529a565b9050610bcf565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610e5c910460ff16836152bc565b6001600160401b03161015610e8f57604051633e1a785160e01b81526001600160401b0382166004820152602401610892565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610eb387612416565b604001516040518263ffffffff1660e01b8152600401610ed39190614fb2565b602060405180830381865af4158015610eee573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f129190614fc4565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610f4c9190615412565b5f60405180830381865af4158015610f66573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f8d9190810190614f81565b90505f600282604051610fa09190615135565b602060405180830381855afa158015610fbb573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610fde9190614fc4565b905082811461100a5760405163baaea89d60e01b81526004810182905260248101849052604401610892565b5050506007909201805460ff1916600117905550505050565b61102c8261252c565b61104c576040516330efa98b60e01b815260048101839052602401610892565b5f61105683611e63565b519050600281600581111561106d5761106d614ce6565b1461108d578060405163170cc93360e21b81526004016108929190614e78565b6109958383612555565b5f806110a16127f4565b600301546110af90846154a6565b90508015806110c457506001600160401b0381115b156110e55760405163222d164360e21b815260048101849052602401610892565b92915050565b6110f7848484846120e1565b5050505050565b6109958383835f612818565b611112612a55565b5f61111b6127f4565b90505f8061112884612a8c565b915091506111358261252c565b611141575050506111c3565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806111835750805b60048351600581111561119857611198614ce6565b036111a7576111a78185612e44565b6111bd826111b885604001516114b0565b612e6e565b50505050505b6111d960015f80516020615af583398151915255565b50565b61099584848484612e94565b5f6111f16127f4565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561122a5761122a614ce6565b600381111561123b5761123b614ce6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6112b182611e63565b90506001835160038111156112c8576112c8614ce6565b146112e9578251604051633b0d540d60e21b815261089291906004016154c5565b6004815160058111156112fe576112fe614ce6565b036113145761130c86612ec0565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61133989612416565b604001516040518263ffffffff1660e01b81526004016113599190614fb2565b606060405180830381865af4158015611374573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061139891906154df565b50915091508184146113c557846040015160405163089938b360e11b815260040161089291815260200190565b806001600160401b031683606001516001600160401b031610806113fe5750806001600160401b03168560a001516001600160401b0316115b1561142757604051632e19bc2d60e11b81526001600160401b0382166004820152602401610892565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b1990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6114b96127f4565b600301546110e5906001600160401b038416615514565b6107068383835f612e94565b6110f784848484612818565b6114f0612a55565b5f6114f96127f4565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561153257611532614ce6565b600381111561154357611543614ce6565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156115bc576115bc614ce6565b146115dd578051604051633b0d540d60e21b815261089291906004016154c5565b60046115ec8260400151611e63565b5160058111156115fe576115fe614ce6565b146116fd575f61160d84612416565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b815260040161164c9190614fb2565b606060405180830381865af4158015611667573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061168b91906154df565b5091509150818460400151146116b75760405163089938b360e11b815260048101839052602401610892565b806001600160401b03168460c001516001600160401b031611156116f957604051632e19bc2d60e11b81526001600160401b0382166004820152602401610892565b5050505b61170684612ec0565b505061171e60015f80516020615af583398151915255565b5050565b5f61172b6127f4565b90506001600160a01b03821661175f5760405163caa903f960e01b81526001600160a01b0383166004820152602401610892565b5f8381526006820160205260409020546001600160a01b031633146117a557335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610892565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6117dc6127f4565b90505f6117e883611e63565b51905060048160058111156117ff576117ff614ce6565b1461181f578060405163170cc93360e21b81526004016108929190614e78565b5f8381526006830160205260409020546001600160a01b031633146118445733611780565b5f838152600683016020526040902054610706906001600160a01b031684612e44565b610995848484846120a4565b5f80516020615ab58339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6118a686612416565b604001516040518263ffffffff1660e01b81526004016118c69190614fb2565b6040805180830381865af41580156118e0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611904919061552b565b915091508061192a57604051632d07135360e01b81528115156004820152602401610892565b5f8281526004840160205260409020805461194490614e46565b90505f036119685760405163089938b360e11b815260048101839052602401610892565b60015f838152600580860160205260409091205460ff169081111561198f5761198f614ce6565b146119c2575f8281526005840160205260409081902054905163170cc93360e21b81526108929160ff1690600401614e78565b5f82815260048401602052604081206119da91614a18565b5f828152600584016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917f8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b910160405180910390a250505050565b5f611a72612a55565b611a7e848484346130ba565b9050611a9660015f80516020615af583398151915255565b9392505050565b5f611aa66127f4565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611adf57611adf614ce6565b6003811115611af057611af0614ce6565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611b6957611b69614ce6565b14158015611b8a5750600381516003811115611b8757611b87614ce6565b14155b15611bab578051604051633b0d540d60e21b815261089291906004016154c5565b5f611bb98260400151611e63565b905080606001516001600160401b03165f03611beb576040516339b894f960e21b815260048101859052602401610892565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611c5993906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611c73573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c9a9190810190614f81565b6040518263ffffffff1660e01b8152600401611cb69190614fb2565b6020604051808303815f875af1158015611cd2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110f79190614fc4565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f80516020615ab58339815191529190611d3d90614e46565b90505f03611d615760405163089938b360e11b815260048101839052602401610892565b60015f838152600580840160205260409091205460ff1690811115611d8857611d88614ce6565b14611dbb575f8281526005820160205260409081902054905163170cc93360e21b81526108929160ff1690600401614e78565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611df2920161554e565b6020604051808303815f875af1158015611e0e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107069190614fc4565b5f611e3b612a55565b611e4682333461322f565b9050611e5e60015f80516020615af583398151915255565b919050565b611e6b614a4f565b5f8281525f80516020615ad5833981519152602052604090819020815160e0810190925280545f80516020615ab5833981519152929190829060ff166005811115611eb857611eb8614ce6565b6005811115611ec957611ec9614ce6565b8152602001600182018054611edd90614e46565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0990614e46565b8015611f545780601f10611f2b57610100808354040283529160200191611f54565b820191905f5260205f20905b815481529060010190602001808311611f3757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b038116611fe45760405163caa903f960e01b81526001600160a01b0382166004820152602401610892565b5f611fed6127f4565b5f8481526007820160205260409020549091506001600160a01b0361010090910416331461201b5733611780565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6040515f905f80516020615ab5833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb069061208c90869086906155d8565b90815260200160405180910390205491505092915050565b6120b0848484846120e1565b61099557604051631036cf9160e11b815260048101859052602401610892565b6120d861346f565b6111d9816134ba565b5f806120eb6127f4565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561212457612124614ce6565b600381111561213557612135614ce6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6121ab82611e63565b90506002835160038111156121c2576121c2614ce6565b146121e3578251604051633b0d540d60e21b815261089291906004016154c5565b60208301516001600160a01b0316331461227f575f8281526006850160205260409020546001600160a01b0316331461221c5733611780565b5f82815260068501602052604090205460a082015161224b91600160b01b90046001600160401b031690615259565b6001600160401b031642101561227f5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610892565b60028151600581111561229457612294614ce6565b036123b657600284015460808401516122b6916001600160401b031690615259565b6001600160401b03164210156122ea5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610892565b87156122fc576122fa8288612555565b505b5f8981526007850160205260409020805460ff191660031790556060830151608082015161233591849161233091906155e7565b613534565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561237884888c61370b565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a31515945061240e9350505050565b6004815160058111156123cb576123cb614ce6565b036123f2576123db83878b61370b565b506123e589612ec0565b600194505050505061240e565b805160405163170cc93360e21b81526108929190600401614e78565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561247a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526124a19190810190615607565b91509150806124c357604051636b2f19e960e01b815260040160405180910390fd5b8151156124e9578151604051636ba589a560e01b81526004810191909152602401610892565b60208201516001600160a01b031615612525576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610892565b5092915050565b5f806125366127f4565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156125a0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125c79190810190615607565b91509150806125e957604051636b2f19e960e01b815260040160405180910390fd5b5f6125f26127f4565b6005810154845191925014612620578251604051636ba589a560e01b81526004810191909152602401610892565b60208301516001600160a01b03161561265c576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610892565b60208301516001600160a01b031615612698576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610892565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016126d59190614fb2565b6040805180830381865af41580156126ef573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127139190615697565b9150915081881461273a5760405163089938b360e11b815260048101899052602401610892565b5f8881526006840160205260409020600101546001600160401b0390811690821611156127cb575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a26127e9565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806128226127f4565b90505f61282e876138f9565b90506128398761252c565b6128485760019250505061240e565b5f8781526006830160205260409020546001600160a01b0316331461286d5733611780565b5f87815260068301602052604090205460a082015161289c91600160b01b90046001600160401b031690615259565b6001600160401b03168160c001516001600160401b031610156128e35760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610892565b5f86156128fb576128f48887612555565b9050612919565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f9061293e906114b0565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa1580156129a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129cb9190614fc4565b90506001600160a01b0386166129f7575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612a169084906156ba565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615af5833981519152805460011901612a8657604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612a95614a4f565b5f80516020615ab58339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612ac888612416565b604001516040518263ffffffff1660e01b8152600401612ae89190614fb2565b6040805180830381865af4158015612b02573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b26919061552b565b915091508015612b4d57604051632d07135360e01b81528115156004820152602401610892565b5f82815260058085016020526040808320815160e08101909252805491929091839160ff90911690811115612b8457612b84614ce6565b6005811115612b9557612b95614ce6565b8152602001600182018054612ba990614e46565b80601f0160208091040260200160405190810160405280929190818152602001828054612bd590614e46565b8015612c205780601f10612bf757610100808354040283529160200191612c20565b820191905f5260205f20905b815481529060010190602001808311612c0357829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612c8b57612c8b614ce6565b14158015612cac5750600181516005811115612ca957612ca9614ce6565b14155b15612ccd57805160405163170cc93360e21b81526108929190600401614e78565b600381516005811115612ce257612ce2614ce6565b03612cf05760048152612cf5565b600581525b836006018160200151604051612d0b9190615135565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff1916906001908490811115612d4e57612d4e614ce6565b021790555060208201516001820190612d67908261518a565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612e0d57612e0d614ce6565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612e4d6127f4565b5f838152600a82016020526040812080549190559091506109958482613bde565b61171e6001600160a01b03831682613c3c565b60015f80516020615af583398151915255565b612ea084848484612818565b61099557604051635bff683f60e11b815260048101859052602401610892565b5f612ec96127f4565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f0257612f02614ce6565b6003811115612f1357612f13614ce6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612fb07fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612fbf9190615259565b6001600160401b0316421015612ff35760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610892565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b03168061304e575060208201515b5f8061305b838886613ccf565b9150915061307485602001516111b887606001516114b0565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f806130c46127f4565b600281015490915061ffff600160401b909104811690861610806130ed575061271061ffff8616115b1561311157604051635f12e6c360e11b815261ffff86166004820152602401610892565b60028101546001600160401b03908116908516101561314d576040516202a06d60e11b81526001600160401b0385166004820152602401610892565b805483108061315f5750806001015483115b156131805760405163222d164360e21b815260048101849052602401610892565b825f61318b82611097565b90505f6131988983613d7c565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f806132396127f4565b90505f61324584611097565b90505f61325187611e63565b905061325c8761252c565b61327c576040516330efa98b60e01b815260048101889052602401610892565b60028151600581111561329157613291614ce6565b146132b257805160405163170cc93360e21b81526108929190600401614e78565b5f8282608001516132c39190615259565b905083600201600a9054906101000a90046001600160401b031682604001516132ec91906152bc565b6001600160401b0316816001600160401b0316111561332957604051636d51fe0560e11b81526001600160401b0382166004820152602401610892565b5f806133358a84613534565b915091505f8a8360405160200161336392919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166134b857604051631afcd79f60e31b815260040160405180910390fd5b565b6134c261346f565b6134cb816142ca565b6134d36142e3565b6111d9606082013560808301356134f060c0850160a08601614c2b565b61350060e0860160c087016156cd565b613511610100870160e088016156e6565b61010087013561352961014089016101208a01614fdb565b8861014001356142f3565b5f8281525f80516020615ad5833981519152602052604081206002015481905f80516020615ab583398151915290600160801b90046001600160401b031661357c85826144d8565b5f61358687614742565b5f888152600585016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561362f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526136569190810190614f81565b6040518263ffffffff1660e01b81526004016136729190614fb2565b6020604051808303815f875af115801561368e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136b29190614fc4565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f806137156127f4565b90505f6137258660400151611e63565b90505f60038251600581111561373d5761373d614ce6565b148061375b575060048251600581111561375957613759614ce6565b145b1561376b575060c08101516137a8565b60028251600581111561378057613780614ce6565b0361378c5750426137a8565b815160405163170cc93360e21b81526108929190600401614e78565b86608001516001600160401b0316816001600160401b0316116137d0575f9350505050611a96565b600483015460608801515f916001600160a01b031690634f22429f906137f5906114b0565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613876573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061389a9190614fc4565b90506001600160a01b0387166138b257876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b613901614a4f565b5f8281525f80516020615ad58339815191526020526040808220815160e0810190925280545f80516020615ab583398151915293929190829060ff16600581111561394e5761394e614ce6565b600581111561395f5761395f614ce6565b815260200160018201805461397390614e46565b80601f016020809104026020016040519081016040528092919081815260200182805461399f90614e46565b80156139ea5780601f106139c1576101008083540402835291602001916139ea565b820191905f5260205f20905b8154815290600101906020018083116139cd57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613a5857613a58614ce6565b14613a8b575f8481526005830160205260409081902054905163170cc93360e21b81526108929160ff1690600401614e78565b60038152426001600160401b031660c08201525f84815260058381016020526040909120825181548493839160ff1916906001908490811115613ad057613ad0614ce6565b021790555060208201516001820190613ae9908261518a565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613b878582613534565b6080840151604080516001600160401b03909216825242602083015291935083925087917ffbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613c2a575f80fd5b505af115801561130c573d5f803e3d5ffd5b80471015613c5f5760405163cd78605960e01b8152306004820152602401610892565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613ca8576040519150601f19603f3d011682016040523d82523d5f602084013e613cad565b606091505b505090508061070657604051630a12f52160e11b815260040160405180910390fd5b5f805f613cda6127f4565b5f86815260088201602052604081208054908290559192509081908015613d6e575f87815260068501602052604090205461271090613d2490600160a01b900461ffff1683615514565b613d2e91906154a6565b91508184600a015f8981526020019081526020015f205f828254613d5291906156ba565b90915550613d6290508282615706565b9250613d6e8984613bde565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16613dc057604051637fab81e560e01b815260040160405180910390fd5b5f80516020615ab583398151915242613ddf6060860160408701614c2b565b6001600160401b0316111580613e195750613dfd6202a300426156ba565b613e0d6060860160408701614c2b565b6001600160401b031610155b15613e5357613e2e6060850160408601614c2b565b604051635879da1360e11b81526001600160401b039091166004820152602401610892565b60038101546001600160401b0390613e7690600160401b900482168583166156ba565b1115613ea057604051633e1a785160e01b81526001600160401b0384166004820152602401610892565b613eb5613eb06060860186615719565b6147b7565b613ec5613eb06080860186615719565b6030613ed4602086018661572d565b905014613f0657613ee8602085018561572d565b6040516326475b2f60e11b8152610892925060040190815260200190565b613f10848061572d565b90505f03613f3d57613f22848061572d565b604051633e08a12560e11b815260040161089292919061576f565b5f60068201613f4c868061572d565b604051613f5a9291906155d8565b90815260200160405180910390205414613f9357613f78848061572d565b60405163a41f772f60e01b815260040161089292919061576f565b613f9d835f6144d8565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613fda8a8061572d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190614022908b018b61572d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509082525060200161406b60608b0160408c01614c2b565b6001600160401b0316815260200161408660608b018b615719565b61408f90615782565b81526020016140a160808b018b615719565b6140aa90615782565b8152602001886001600160401b03168152506040518263ffffffff1660e01b81526004016140d891906158af565b5f60405180830381865af41580156140f2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141199190810190615966565b5f82815260048601602052604090209193509150614137828261518a565b508160068401614147888061572d565b6040516141559291906155d8565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90614191908590600401614fb2565b6020604051808303815f875af11580156141ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141d19190614fc4565b5f8481526005860160205260409020805460ff1916600117905590506141f7878061572d565b5f8581526005870160205260409020600101916142159190836159a9565b505f83815260058501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580837fe093cab27f3fc60439e008f3a2073310d3ac9ac9b7d59e53a06b2588f7498bd6886142978b8061572d565b6142a760608e0160408f01614c2b565b6040516142b79493929190615a62565b60405180910390a3509095945050505050565b6142d261346f565b6142da614920565b6111d981614928565b6142eb61346f565b6134b8614a10565b6142fb61346f565b5f6143046127f4565b905061ffff8616158061431c575061271061ffff8716115b1561434057604051635f12e6c360e11b815261ffff87166004820152602401610892565b878911156143645760405163222d164360e21b8152600481018a9052602401610892565b60ff851615806143775750600a60ff8616115b1561439a5760405163170db35960e31b815260ff86166004820152602401610892565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614401576040516202a06d60e11b81526001600160401b0388166004820152602401610892565b835f036144215760405163a733007160e01b815260040160405180910390fd5b8161444257604051632f6bd1db60e01b815260048101839052602401610892565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f80516020615ab58339815191525f6001600160401b03808416908516111561450c5761450583856155e7565b9050614519565b61451684846155e7565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b9004909216606082015242911580614586575060018401548151614582916001600160401b0316906156ba565b8210155b156145ae576001600160401b03808416606083015282825260408201511660208201526145cd565b82816060018181516145c09190615259565b6001600160401b03169052505b60608101516145dd9060646152bc565b602082015160018601546001600160401b0392909216916146089190600160401b900460ff166152bc565b6001600160401b0316101561464157606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610892565b85816040018181516146539190615259565b6001600160401b03169052506040810180518691906146739083906155e7565b6001600160401b0316905250600184015460408201516064916146a191600160401b90910460ff16906152bc565b6001600160401b031610156146da576040808201519051633e1a785160e01b81526001600160401b039091166004820152602401610892565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8181525f80516020615ad58339815191526020526040812060020180545f80516020615ab5833981519152919060089061478c90600160401b90046001600160401b0316615a99565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b6147c46020820182614bfe565b63ffffffff161580156147e457506147df6020820182614ff6565b151590505b1561482b576147f66020820182614bfe565b6148036020830183614ff6565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610892565b6148386020820182614ff6565b90506148476020830183614bfe565b63ffffffff161115614860576147f66020820182614bfe565b60015b6148706020830183614ff6565b905081101561171e576148866020830183614ff6565b614891600184615706565b8181106148a0576148a061503b565b90506020020160208101906148b59190614fdb565b6001600160a01b03166148cb6020840184614ff6565b838181106148db576148db61503b565b90506020020160208101906148f09190614fdb565b6001600160a01b0316101561491857604051630dbc8d5f60e31b815260040160405180910390fd5b600101614863565b6134b861346f565b61493061346f565b80355f80516020615ab5833981519152908155601461495560608401604085016156e6565b60ff161180614974575061496f60608301604084016156e6565b60ff16155b156149a85761498960608301604084016156e6565b604051634a59bbff60e11b815260ff9091166004820152602401610892565b6149b860608301604084016156e6565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556149e96040830160208401614c2b565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612e8161346f565b508054614a2490614e46565b5f825580601f10614a33575050565b601f0160209004905f5260205f20908101906111d99190614a8c565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614aa0575f8155600101614a8d565b5090565b80151581146111d9575f80fd5b803563ffffffff81168114611e5e575f80fd5b5f805f60608486031215614ad6575f80fd5b833592506020840135614ae881614aa4565b9150614af660408501614ab1565b90509250925092565b5f60208284031215614b0f575f80fd5b5035919050565b5f6101608284031215614b27575f80fd5b50919050565b5f8060408385031215614b3e575f80fd5b82356001600160401b03811115614b53575f80fd5b830160808186031215614b64575f80fd5b9150614b7260208401614ab1565b90509250929050565b5f8060408385031215614b8c575f80fd5b82359150614b7260208401614ab1565b6001600160a01b03811681146111d9575f80fd5b5f805f8060808587031215614bc3575f80fd5b843593506020850135614bd581614aa4565b9250614be360408601614ab1565b91506060850135614bf381614b9c565b939692955090935050565b5f60208284031215614c0e575f80fd5b611a9682614ab1565b6001600160401b03811681146111d9575f80fd5b5f60208284031215614c3b575f80fd5b8135611a9681614c17565b5f8060408385031215614c57575f80fd5b823591506020830135614c6981614b9c565b809150509250929050565b803561ffff81168114611e5e575f80fd5b5f805f60608486031215614c97575f80fd5b83356001600160401b03811115614cac575f80fd5b840160a08187031215614cbd575f80fd5b9250614ccb60208501614c74565b91506040840135614cdb81614c17565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614d0a57614d0a614ce6565b9052565b5f5b83811015614d28578181015183820152602001614d10565b50505f910152565b5f8151808452614d47816020860160208601614d0e565b601f01601f19169290920160200192915050565b60208152614d6d602082018351614cfa565b5f602083015160e06040840152614d88610100840182614d30565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614dec575f80fd5b82356001600160401b0380821115614e02575f80fd5b818501915085601f830112614e15575f80fd5b813581811115614e23575f80fd5b866020828501011115614e34575f80fd5b60209290920196919550909350505050565b600181811c90821680614e5a57607f821691505b602082108103614b2757634e487b7160e01b5f52602260045260245ffd5b602081016110e58284614cfa565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614ebc57614ebc614e86565b60405290565b604080519081016001600160401b0381118282101715614ebc57614ebc614e86565b604051601f8201601f191681016001600160401b0381118282101715614f0c57614f0c614e86565b604052919050565b5f6001600160401b03821115614f2c57614f2c614e86565b50601f01601f191660200190565b5f82601f830112614f49575f80fd5b8151614f5c614f5782614f14565b614ee4565b818152846020838601011115614f70575f80fd5b61240e826020830160208701614d0e565b5f60208284031215614f91575f80fd5b81516001600160401b03811115614fa6575f80fd5b61240e84828501614f3a565b602081525f611a966020830184614d30565b5f60208284031215614fd4575f80fd5b5051919050565b5f60208284031215614feb575f80fd5b8135611a9681614b9c565b5f808335601e1984360301811261500b575f80fd5b8301803591506001600160401b03821115615024575f80fd5b6020019150600581901b3603821315613704575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615063575f80fd5b9190910192915050565b5f82601f83011261507c575f80fd5b813561508a614f5782614f14565b81815284602083860101111561509e575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156150ca575f80fd5b6150d2614e9a565b82356001600160401b03808211156150e8575f80fd5b6150f43683870161506d565b83526020850135915080821115615109575f80fd5b506151163682860161506d565b602083015250604083013561512a81614c17565b604082015292915050565b5f8251615063818460208701614d0e565b601f82111561070657805f5260205f20601f840160051c8101602085101561516b5750805b601f840160051c820191505b818110156110f7575f8155600101615177565b81516001600160401b038111156151a3576151a3614e86565b6151b7816151b18454614e46565b84615146565b602080601f8311600181146151ea575f84156151d35750858301515b5f19600386901b1c1916600185901b17855561130c565b5f85815260208120601f198616915b82811015615218578886015182559484019460019091019084016151f9565b508582101561523557878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111561252557612525615245565b6001600160401b0383168152604060208201525f61240e6040830184614d30565b5f63ffffffff8083168181036152b2576152b2615245565b6001019392505050565b6001600160401b038181168382160280821691908281146152df576152df615245565b505092915050565b5f808335601e198436030181126152fc575f80fd5b83016020810192503590506001600160401b0381111561531a575f80fd5b803603821315613704575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561540557848303601f19018952813536889003605e1901811261538c575f80fd5b8701606061539a82806152e7565b8287526153aa8388018284615328565b925050506153ba868301836152e7565b868303888801526153cc838284615328565b9250505060408083013592506153e183614c17565b6001600160401b039290921694909101939093529783019790830190600101615367565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561543681614b9c565b6001600160a01b031660608381019190915283013536849003601e1901811261545d575f80fd5b83016020810190356001600160401b03811115615478575f80fd5b8060051b3603821315615489575f80fd5b60808085015261549d60a085018284615350565b95945050505050565b5f826154c057634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106154d9576154d9614ce6565b91905290565b5f805f606084860312156154f1575f80fd5b83519250602084015161550381614c17565b6040850151909250614cdb81614c17565b80820281158282048414176110e5576110e5615245565b5f806040838503121561553c575f80fd5b825191506020830151614c6981614aa4565b5f60208083525f845461556081614e46565b806020870152604060018084165f8114615581576001811461559d576155ca565b60ff19851660408a0152604084151560051b8a010195506155ca565b895f5260205f205f5b858110156155c15781548b82018601529083019088016155a6565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b0382811682821603908082111561252557612525615245565b5f8060408385031215615618575f80fd5b82516001600160401b038082111561562e575f80fd5b9084019060608287031215615641575f80fd5b615649614e9a565b82518152602083015161565b81614b9c565b6020820152604083015182811115615671575f80fd5b61567d88828601614f3a565b6040830152508094505050506020830151614c6981614aa4565b5f80604083850312156156a8575f80fd5b825191506020830151614c6981614c17565b808201808211156110e5576110e5615245565b5f602082840312156156dd575f80fd5b611a9682614c74565b5f602082840312156156f6575f80fd5b813560ff81168114611a96575f80fd5b818103818111156110e5576110e5615245565b5f8235603e19833603018112615063575f80fd5b5f808335601e19843603018112615742575f80fd5b8301803591506001600160401b0382111561575b575f80fd5b602001915036819003821315613704575f80fd5b602081525f61240e602083018486615328565b5f60408236031215615792575f80fd5b61579a614ec2565b6157a383614ab1565b81526020808401356001600160401b03808211156157bf575f80fd5b9085019036601f8301126157d1575f80fd5b8135818111156157e3576157e3614e86565b8060051b91506157f4848301614ee4565b818152918301840191848101903684111561580d575f80fd5b938501935b83851015615837578435925061582783614b9c565b8282529385019390850190615812565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158a45784516001600160a01b0316825293830193600192909201919083019061587b565b509695505050505050565b60208152815160208201525f602083015160e060408401526158d5610100840182614d30565b90506040840151601f19808584030160608601526158f38383614d30565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526159238383615849565b925060a08601519150808584030160c0860152506159418282615849565b91505060c084015161595e60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615977575f80fd5b8251915060208301516001600160401b03811115615993575f80fd5b61599f85828601614f3a565b9150509250929050565b6001600160401b038311156159c0576159c0614e86565b6159d4836159ce8354614e46565b83615146565b5f601f841160018114615a05575f85156159ee5750838201355b5f19600387901b1c1916600186901b1783556110f7565b5f83815260208120601f198716915b82811015615a345786850135825560209485019460019092019101615a14565b5086821015615a50575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b03808716835260606020840152615a85606084018688615328565b915080841660408401525095945050505050565b5f6001600160401b038083168181036152b2576152b261524556fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb059b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220f406748c3ac647a2e55b386a9643e0b935e8ec0642a9215ef35ffdda6141a27d64736f6c63430008190033", + 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\"},{\"internalType\":\"bytes32\",\"name\":\"expectedValidationID\",\"type\":\"bytes32\"}],\"name\":\"UnexpectedValidationID\",\"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\":\"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\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"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\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"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\":\"NODE_ID_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"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: "0x608060405234801561000f575f80fd5b50604051615be6380380615be683398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615a998061014d5f395ff3fe608060405260043610610254575f3560e01c806380dd672f1161013f578063ba3a4b97116100b3578063c974d1b611610078578063c974d1b6146106cd578063ce161f14146106e1578063d5f20ff61461071d578063df93d8de14610749578063fb8b11dd1461075f578063fd7ac5e71461077e575f80fd5b8063ba3a4b9714610635578063bb0b193814610654578063bc5fbfec14610668578063bee0a03f1461069b578063c599e24f146106ba575f80fd5b80639ae06447116101045780639ae0644714610597578063a3a65e48146105b6578063a9778a7a146103a8578063af2f5feb146105d5578063afb98096146105e8578063b771b3bc1461061b575f80fd5b806380dd672f146105075780638280a25a146105265780638ef34c981461053a57806393e24598146105595780639681d94014610578575f80fd5b806337b9be8f116101d657806360ad77841161019b57806360ad778414610478578063620658561461049757806363e2ca971461044f578063732214f8146104b657806376f78621146104c95780637d8d2f77146104e8575f80fd5b806337b9be8f146103d05780633a1cfff6146103ef5780635dc1f5351461040e5780635dd6a6cb1461043057806360305d621461044f575f80fd5b806320d91b7a1161021c57806320d91b7a1461030157806325e1c776146103205780632e2194d81461033f578063329c3e121461037657806335455ded146103a8575f80fd5b80630118acc4146102585780630322ed98146102795780630ba512d114610298578063151d30d1146102b75780631ec44724146102e2575b5f80fd5b348015610263575f80fd5b50610277610272366004614b41565b61079d565b005b348015610284575f80fd5b50610277610293366004614b7c565b6107ae565b3480156102a3575f80fd5b506102776102b2366004614b93565b610a41565b3480156102c2575f80fd5b506102cb600a81565b60405160ff90911681526020015b60405180910390f35b3480156102ed575f80fd5b506102776102fc366004614b41565b610b1e565b34801561030c575f80fd5b5061027761031b366004614baa565b610b2a565b34801561032b575f80fd5b5061027761033a366004614bf8565b6110de565b34801561034a575f80fd5b5061035e610359366004614b7c565b611152565b6040516001600160401b0390911681526020016102d9565b348015610381575f80fd5b506103906001600160991b0181565b6040516001600160a01b0390911681526020016102d9565b3480156103b3575f80fd5b506103bd61271081565b60405161ffff90911681526020016102d9565b3480156103db575f80fd5b506102776103ea366004614c2d565b6111a6565b3480156103fa575f80fd5b50610277610409366004614b41565b6111b9565b348015610419575f80fd5b506104226111c5565b6040519081526020016102d9565b34801561043b575f80fd5b5061027761044a366004614c2d565b6111d4565b34801561045a575f80fd5b50610463601481565b60405163ffffffff90911681526020016102d9565b348015610483575f80fd5b50610277610492366004614bf8565b6111e0565b3480156104a2575f80fd5b506104226104b1366004614c8f565b611433565b3480156104c1575f80fd5b506104225f81565b3480156104d4575f80fd5b506102776104e3366004614b41565b611453565b3480156104f3575f80fd5b50610277610502366004614c2d565b61145f565b348015610512575f80fd5b50610277610521366004614bf8565b61146b565b348015610531575f80fd5b506102cb603081565b348015610545575f80fd5b50610277610554366004614caa565b61166c565b348015610564575f80fd5b50610277610573366004614b7c565b61171d565b348015610583575f80fd5b50610422610592366004614cd8565b6117b1565b3480156105a2575f80fd5b506102776105b1366004614c2d565b61188a565b3480156105c1575f80fd5b506104226105d0366004614cd8565b611896565b6104226105e3366004614d02565b611a85565b3480156105f3575f80fd5b506104227f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610626575f80fd5b506103906005600160991b0181565b348015610640575f80fd5b5061027761064f366004614b7c565b611ab9565b34801561065f575f80fd5b5061035e611d12565b348015610673575f80fd5b506104227fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b3480156106a6575f80fd5b506102776106b5366004614b7c565b611d34565b6104226106c8366004614b7c565b611e50565b3480156106d8575f80fd5b506102cb601481565b3480156106ec575f80fd5b506107006106fb366004614cd8565b611e7c565b604080519283526001600160401b039091166020830152016102d9565b348015610728575f80fd5b5061073c610737366004614b7c565b611fff565b6040516102d99190614dd8565b348015610754575f80fd5b5061035e6202a30081565b34801561076a575f80fd5b50610277610779366004614caa565b61214e565b348015610789575f80fd5b50610422610798366004614e8e565b6121e5565b6107a98383835f61221d565b505050565b5f6107b7612249565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156107f1576107f1614d63565b600581111561080257610802614d63565b815260200160018201805461081690614ef9565b80601f016020809104026020016040519081016040528092919081815260200182805461084290614ef9565b801561088d5780601f106108645761010080835404028352916020019161088d565b820191905f5260205f20905b81548152906001019060200180831161087057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561090557610905614d63565b14610941575f8381526005830160205260409081902054905163170cc93360e21b81526109389160ff1690600401614f2b565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156109b8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109df9190810190615034565b6040518263ffffffff1660e01b81526004016109fb9190615065565b6020604051808303815f875af1158015610a17573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3b9190615077565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a8a575080546001600160401b03808416911610155b15610aa85760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610ad28361226d565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610a3b8383835f612281565b5f610b33612249565b600781015490915060ff1615610b5c57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b9f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc39190615077565b836020013514610bec576040516372b0a7e760e11b815260208401356004820152602401610938565b30610bfd606085016040860161508e565b6001600160a01b031614610c4057610c1b606084016040850161508e565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610938565b5f610c4e60608501856150a9565b905090505f805b828163ffffffff161015610ed4575f610c7160608801886150a9565b8363ffffffff16818110610c8757610c876150ee565b9050602002810190610c999190615102565b610ca29061516d565b80516040519192505f916006880191610cba916151e8565b90815260200160405180910390205414610cea57805160405163a41f772f60e01b81526109389190600401615065565b805151601414610d10578051604051633e08a12560e11b81526109389190600401615065565b5f6002885f013584604051602001610d3f92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610d59916151e8565b602060405180830381855afa158015610d74573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d979190615077565b90508086600601835f0151604051610daf91906151e8565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610def908261523d565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610e5e908561530c565b8251602001519094506bffffffffffffffffffffffff1916817f9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d78460400151604051610eb991906001600160401b0391909116815260200190565b60405180910390a3505080610ecd9061532c565b9050610c55565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610f17910460ff168361534e565b6001600160401b03161015610f4a57604051633e1a785160e01b81526001600160401b0382166004820152602401610938565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610f6e876125b6565b604001516040518263ffffffff1660e01b8152600401610f8e9190615065565b602060405180830381865af4158015610fa9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fcd9190615077565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b815260040161100791906154a4565b5f60405180830381865af4158015611021573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526110489190810190615034565b90505f60028260405161105b91906151e8565b602060405180830381855afa158015611076573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906110999190615077565b90508281146110c55760405163baaea89d60e01b81526004810182905260248101849052604401610938565b5050506007909201805460ff1916600117905550505050565b6110e7826126cc565b611107576040516330efa98b60e01b815260048101839052602401610938565b5f61111183611fff565b519050600281600581111561112857611128614d63565b14611148578060405163170cc93360e21b81526004016109389190614f2b565b610a3b83836126f5565b5f8061115c61299b565b6003015461116a9084615538565b905080158061117f57506001600160401b0381115b156111a05760405163222d164360e21b815260048101849052602401610938565b92915050565b6111b284848484612281565b5050505050565b610a3b8383835f6129bf565b5f6111ce612249565b54919050565b610a3b84848484612c06565b5f6111e961299b565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561122257611222614d63565b600381111561123357611233614d63565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6112a982611fff565b90506001835160038111156112c0576112c0614d63565b146112e1578251604051633b0d540d60e21b81526109389190600401615557565b6004815160058111156112f6576112f6614d63565b0361130c5761130486612c32565b505050505050565b8260a001516001600160401b031681608001516001600160401b031610156113ac575f8061133987611e7c565b915091508184146113675760405163fee3144560e01b81526004810183905260248101859052604401610938565b8460a001516001600160401b0316816001600160401b031610156113a957604051632e19bc2d60e11b81526001600160401b0382166004820152602401610938565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f61143c61299b565b600301546111a0906001600160401b038416615571565b6107a98383835f612c06565b6111b2848484846129bf565b611473612e03565b5f61147c61299b565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156114b5576114b5614d63565b60038111156114c6576114c6614d63565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152905060038151600381111561153f5761153f614d63565b14611560578051604051633b0d540d60e21b81526109389190600401615557565b5f61156e8260400151611fff565b9050600461157f8360400151611fff565b51600581111561159157611591614d63565b141580156115b857508160c001516001600160401b031681608001516001600160401b0316105b15611646575f806115c886611e7c565b91509150818460400151146116015781846040015160405163fee3144560e01b8152600401610938929190918252602082015260400190565b806001600160401b03168460c001516001600160401b0316111561164357604051632e19bc2d60e11b81526001600160401b0382166004820152602401610938565b50505b61164f85612c32565b50505061166860015f80516020615a4483398151915255565b5050565b5f61167561299b565b90506001600160a01b0382166116a95760405163caa903f960e01b81526001600160a01b0383166004820152602401610938565b5f8381526006820160205260409020546001600160a01b031633146116ef57335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610938565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f61172661299b565b90505f61173283611fff565b519050600481600581111561174957611749614d63565b14611769578060405163170cc93360e21b81526004016109389190614f2b565b5f8381526006830160205260409020546001600160a01b0316331461178e57336116ca565b5f8381526006830160205260409020546107a9906001600160a01b031684612e4d565b5f6117ba612e03565b5f6117c361299b565b90505f806117d085612e77565b915091506117dd826126cc565b6117eb5750915061186f9050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b0391821691168061182d5750805b60048351600581111561184257611842614d63565b03611851576118518185612e4d565b611867826118628560400151611433565b61322c565b509193505050505b61188560015f80516020615a4483398151915255565b919050565b610a3b8484848461221d565b5f806118a0612249565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6118c7876125b6565b604001516040518263ffffffff1660e01b81526004016118e79190615065565b6040805180830381865af4158015611901573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119259190615588565b915091508061194b57604051632d07135360e01b81528115156004820152602401610938565b5f8281526004840160205260409020805461196590614ef9565b90505f036119895760405163089938b360e11b815260048101839052602401610938565b60015f838152600580860160205260409091205460ff16908111156119b0576119b0614d63565b146119e3575f8281526005840160205260409081902054905163170cc93360e21b81526109389160ff1690600401614f2b565b5f82815260048401602052604081206119fb91614a8d565b5f828152600584016020908152604091829020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff19909216919091179091559101549251600160c01b90930416825283917f967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06910160405180910390a2509392505050565b5f611a8e612e03565b611a9a8484843461323f565b9050611ab260015f80516020615a4483398151915255565b9392505050565b5f611ac261299b565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611afb57611afb614d63565b6003811115611b0c57611b0c614d63565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611b8557611b85614d63565b14158015611ba65750600381516003811115611ba357611ba3614d63565b14155b15611bc7578051604051633b0d540d60e21b81526109389190600401615557565b5f611bd58260400151611fff565b905080606001516001600160401b03165f03611c07576040516339b894f960e21b815260048101859052602401610938565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611c7593906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611c8f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611cb69190810190615034565b6040518263ffffffff1660e01b8152600401611cd29190615065565b6020604051808303815f875af1158015611cee573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111b29190615077565b5f611d1b612249565b60030154600160401b90046001600160401b0316919050565b5f611d3d612249565b5f8381526004820160205260409020805491925090611d5b90614ef9565b90505f03611d7f5760405163089938b360e11b815260048101839052602401610938565b60015f838152600580840160205260409091205460ff1690811115611da657611da6614d63565b14611dd9575f8281526005820160205260409081902054905163170cc93360e21b81526109389160ff1690600401614f2b565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611e1092016155ab565b6020604051808303815f875af1158015611e2c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a99190615077565b5f611e59612e03565b611e6482333461346e565b905061188560015f80516020615a4483398151915255565b5f805f611e88846125b6565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611ec89190615065565b606060405180830381865af4158015611ee3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f079190615635565b9250925092505f611f16612249565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611f6a57604051632e19bc2d60e11b81526001600160401b0384166004820152602401610938565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611fea90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b612007614ac4565b5f612010612249565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff9091169081111561204a5761204a614d63565b600581111561205b5761205b614d63565b815260200160018201805461206f90614ef9565b80601f016020809104026020016040519081016040528092919081815260200182805461209b90614ef9565b80156120e65780601f106120bd576101008083540402835291602001916120e6565b820191905f5260205f20905b8154815290600101906020018083116120c957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b0381166121805760405163caa903f960e01b81526001600160a01b0382166004820152602401610938565b5f61218961299b565b5f8481526007820160205260409020549091506001600160a01b036101009091041633146121b757336116ca565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f806121ef612249565b905080600601848460405161220592919061566a565b90815260200160405180910390205491505092915050565b61222984848484612281565b610a3b57604051631036cf9160e11b815260048101859052602401610938565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b6122756136ae565b61227e816136f9565b50565b5f8061228b61299b565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156122c4576122c4614d63565b60038111156122d5576122d5614d63565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61234b82611fff565b905060028351600381111561236257612362614d63565b14612383578251604051633b0d540d60e21b81526109389190600401615557565b60208301516001600160a01b0316331461241f575f8281526006850160205260409020546001600160a01b031633146123bc57336116ca565b5f82815260068501602052604090205460c08201516123eb91600160b01b90046001600160401b03169061530c565b6001600160401b031642101561241f5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610938565b60028151600581111561243457612434614d63565b036125565760028401546080840151612456916001600160401b03169061530c565b6001600160401b031642101561248a5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610938565b871561249c5761249a82886126f5565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a08201516124d59184916124d09190615679565b613773565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561251884888c61393d565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506125ae9350505050565b60048151600581111561256b5761256b614d63565b036125925761257b83878b61393d565b5061258589612c32565b60019450505050506125ae565b805160405163170cc93360e21b81526109389190600401614f2b565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561261a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526126419190810190615699565b915091508061266357604051636b2f19e960e01b815260040160405180910390fd5b815115612689578151604051636ba589a560e01b81526004810191909152602401610938565b60208201516001600160a01b0316156126c5576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610938565b5092915050565b5f806126d661299b565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612740573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127679190810190615699565b915091508061278957604051636b2f19e960e01b815260040160405180910390fd5b5f61279261299b565b60058101548451919250146127c0578251604051636ba589a560e01b81526004810191909152602401610938565b60208301516001600160a01b0316156127fc576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610938565b60208301516001600160a01b031615612838576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610938565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016128759190615065565b6040805180830381865af415801561288f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128b39190615729565b915091508188146128e15760405163fee3144560e01b81526004810183905260248101899052604401610938565b5f8881526006840160205260409020600101546001600160401b039081169082161115612972575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612990565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806129c961299b565b90506129d486613b2b565b5f6129de87611fff565b90506129e9876126cc565b6129f8576001925050506125ae565b5f8781526006830160205260409020546001600160a01b03163314612a1d57336116ca565b5f87815260068301602052604090205460c0820151612a4c91600160b01b90046001600160401b03169061530c565b6001600160401b03168160e001516001600160401b03161015612a935760e081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610938565b5f8615612aab57612aa488876126f5565b9050612ac9565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612aee90611433565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612b58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b7c9190615077565b90506001600160a01b038616612ba8575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612bc790849061574c565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b612c12848484846129bf565b610a3b57604051635bff683f60e11b815260048101859052602401610938565b5f612c3b61299b565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c7457612c74614d63565b6003811115612c8557612c85614d63565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612cf9613e16565b8260800151612d08919061530c565b6001600160401b0316421015612d3c5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610938565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612d97575060208201515b5f80612da4838886613e31565b91509150612dbd85602001516118628760600151611433565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80516020615a44833981519152805460011901612e3457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60015f80516020615a4483398151915255565b5f612e5661299b565b5f838152600a8201602052604081208054919055909150610a3b8482613ede565b5f612e80614ac4565b5f612e89612249565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612eb0886125b6565b604001516040518263ffffffff1660e01b8152600401612ed09190615065565b6040805180830381865af4158015612eea573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f0e9190615588565b915091508015612f3557604051632d07135360e01b81528115156004820152602401610938565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f6d57612f6d614d63565b6005811115612f7e57612f7e614d63565b8152602001600182018054612f9290614ef9565b80601f0160208091040260200160405190810160405280929190818152602001828054612fbe90614ef9565b80156130095780601f10612fe057610100808354040283529160200191613009565b820191905f5260205f20905b815481529060010190602001808311612fec57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561308157613081614d63565b141580156130a2575060018151600581111561309f5761309f614d63565b14155b156130c357805160405163170cc93360e21b81526109389190600401614f2b565b6003815160058111156130d8576130d8614d63565b036130e657600481526130eb565b600581525b83600601816020015160405161310191906151e8565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561314457613144614d63565b02179055506020820151600182019061315d908261523d565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b6116686001600160a01b03831682613f3c565b5f8061324961299b565b600281015490915061ffff600160401b90910481169086161080613272575061271061ffff8616115b1561329657604051635f12e6c360e11b815261ffff86166004820152602401610938565b60028101546001600160401b0390811690851610156132d2576040516202a06d60e11b81526001600160401b0385166004820152602401610938565b80548310806132e45750806001015483115b156133055760405163222d164360e21b815260048101849052602401610938565b825f61331082611152565b90505f6133d76133208a8061575f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133619250505060208c018c61575f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133a59250505060608d0160408e01614c8f565b6133b260608e018e6157a1565b6133bb906157b5565b6133c860808f018f6157a1565b6133d1906157b5565b87613fcf565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f8061347861299b565b90505f61348484611152565b90505f61349087611fff565b905061349b876126cc565b6134bb576040516330efa98b60e01b815260048101889052602401610938565b6002815160058111156134d0576134d0614d63565b146134f157805160405163170cc93360e21b81526109389190600401614f2b565b5f828260a00151613502919061530c565b905083600201600a9054906101000a90046001600160401b0316826040015161352b919061534e565b6001600160401b0316816001600160401b0316111561356857604051636d51fe0560e11b81526001600160401b0382166004820152602401610938565b5f806135748a84613773565b915091505f8a836040516020016135a292919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166136f757604051631afcd79f60e31b815260040160405180910390fd5b565b6137016136ae565b61370a816143b9565b6137126143d2565b61227e6060820135608083013561372f60c0850160a08601614c8f565b61373f60e0860160c0870161587c565b613750610100870160e08801615895565b61010087013561376861014089016101208a0161508e565b8861014001356143e2565b5f805f61377e612249565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166137ae85826145a4565b5f6137b887614811565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561385c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526138839190810190615034565b6040518263ffffffff1660e01b815260040161389f9190615065565b6020604051808303815f875af11580156138bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138df9190615077565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f8061394761299b565b90505f6139578660400151611fff565b90505f60038251600581111561396f5761396f614d63565b148061398d575060048251600581111561398b5761398b614d63565b145b1561399d575060e08101516139da565b6002825160058111156139b2576139b2614d63565b036139be5750426139da565b815160405163170cc93360e21b81526109389190600401614f2b565b86608001516001600160401b0316816001600160401b031611613a02575f9350505050611ab2565b600483015460608801515f916001600160a01b031690634f22429f90613a2790611433565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613aa8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613acc9190615077565b90506001600160a01b038716613ae457876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613b34612249565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115613b6e57613b6e614d63565b6005811115613b7f57613b7f614d63565b8152602001600182018054613b9390614ef9565b80601f0160208091040260200160405190810160405280929190818152602001828054613bbf90614ef9565b8015613c0a5780601f10613be157610100808354040283529160200191613c0a565b820191905f5260205f20905b815481529060010190602001808311613bed57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613c8257613c82614d63565b14613cb5575f8381526005830160205260409081902054905163170cc93360e21b81526109389160ff1690600401614f2b565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613cfa57613cfa614d63565b021790555060208201516001820190613d13908261523d565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613db38482613773565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613e08939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f613e1f612249565b600101546001600160401b0316919050565b5f805f613e3c61299b565b5f86815260088201602052604081208054908290559192509081908015613ed0575f87815260068501602052604090205461271090613e8690600160a01b900461ffff1683615571565b613e909190615538565b91508184600a015f8981526020019081526020015f205f828254613eb4919061574c565b90915550613ec4905082826158b5565b9250613ed08984613ede565b509097909650945050505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613f2a575f80fd5b505af1158015611304573d5f803e3d5ffd5b80471015613f5f5760405163cd78605960e01b8152306004820152602401610938565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613fa8576040519150601f19603f3d011682016040523d82523d5f602084013e613fad565b606091505b50509050806107a957604051630a12f52160e11b815260040160405180910390fd5b5f613fd8612249565b6007015460ff16613ffc57604051637fab81e560e01b815260040160405180910390fd5b5f614005612249565b905042866001600160401b031611158061403457506140276202a3004261574c565b866001600160401b031610155b1561405d57604051635879da1360e11b81526001600160401b0387166004820152602401610938565b60038101546001600160401b039061408090600160401b9004821685831661574c565b11156140aa57604051633e1a785160e01b81526001600160401b0384166004820152602401610938565b6140b38561487a565b6140bc8461487a565b86516030146140e35786516040516326475b2f60e11b815260040161093891815260200190565b87516014146141075787604051633e08a12560e11b81526004016109389190615065565b5f801b816006018960405161411c91906151e8565b9081526020016040518091039020541461414b578760405163a41f772f60e01b81526004016109389190615065565b614155835f6145a4565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b81526004016141d5919061592e565b5f60405180830381865af41580156141ef573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261421691908101906159e5565b5f82815260048601602052604090209193509150614234828261523d565b5081836006018b60405161424891906151e8565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90614284908590600401615065565b6020604051808303815f875af11580156142a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142c49190615077565b5f8481526005860160205260409020805460ff191660019081178255919250016142ee8c8261523d565b505f8381526005850160205260409020600281018054600160c01b6001600160401b038a1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690556143458b6020015190565b6bffffffffffffffffffffffff1916837f5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d838c8a6040516143a2939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a350909998505050505050505050565b6143c16136ae565b6143c9614999565b61227e816149a1565b6143da6136ae565b6136f7614a85565b6143ea6136ae565b5f6143f361299b565b905061ffff8616158061440b575061271061ffff8716115b1561442f57604051635f12e6c360e11b815261ffff87166004820152602401610938565b878911156144535760405163222d164360e21b8152600481018a9052602401610938565b60ff851615806144665750600a60ff8616115b156144895760405163170db35960e31b815260ff86166004820152602401610938565b614491613e16565b6001600160401b0316876001600160401b031610156144cd576040516202a06d60e11b81526001600160401b0388166004820152602401610938565b835f036144ed5760405163a733007160e01b815260040160405180910390fd5b8161450e57604051632f6bd1db60e01b815260048101839052602401610938565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f6145ad612249565b90505f826001600160401b0316846001600160401b031611156145db576145d48385615679565b90506145e8565b6145e58484615679565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b9004909216606082015242911580614655575060018401548151614651916001600160401b03169061574c565b8210155b1561467d576001600160401b038084166060830152828252604082015116602082015261469c565b828160600181815161468f919061530c565b6001600160401b03169052505b60608101516146ac90606461534e565b602082015160018601546001600160401b0392909216916146d79190600160401b900460ff1661534e565b6001600160401b0316101561471057606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610938565b8581604001818151614722919061530c565b6001600160401b0316905250604081018051869190614742908390615679565b6001600160401b03169052506001840154604082015160649161477091600160401b90910460ff169061534e565b6001600160401b031610156147a9576040808201519051633e1a785160e01b81526001600160401b039091166004820152602401610938565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8061481b612249565b5f848152600582016020526040902060020180549192509060089061484f90600160401b90046001600160401b0316615a28565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b805163ffffffff16158015614893575060208101515115155b156148c757805160208201515160405163c08a0f1d60e01b815263ffffffff90921660048301526024820152604401610938565b602081015151815163ffffffff16111561490a57805160208201515160405163c08a0f1d60e01b815263ffffffff90921660048301526024820152604401610938565b60015b81602001515181101561166857602082015161492a6001836158b5565b8151811061493a5761493a6150ee565b60200260200101516001600160a01b031682602001518281518110614961576149616150ee565b60200260200101516001600160a01b0316101561499157604051630dbc8d5f60e31b815260040160405180910390fd5b60010161490d565b6136f76136ae565b6149a96136ae565b5f6149b2612249565b82358155905060146149ca6060840160408501615895565b60ff1611806149e957506149e46060830160408401615895565b60ff16155b15614a1d576149fe6060830160408401615895565b604051634a59bbff60e11b815260ff9091166004820152602401610938565b614a2d6060830160408401615895565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614a5e6040830160208401614c8f565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612e3a6136ae565b508054614a9990614ef9565b5f825580601f10614aa8575050565b601f0160209004905f5260205f209081019061227e9190614b09565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614b1d575f8155600101614b0a565b5090565b801515811461227e575f80fd5b803563ffffffff81168114611885575f80fd5b5f805f60608486031215614b53575f80fd5b833592506020840135614b6581614b21565b9150614b7360408501614b2e565b90509250925092565b5f60208284031215614b8c575f80fd5b5035919050565b5f6101608284031215614ba4575f80fd5b50919050565b5f8060408385031215614bbb575f80fd5b82356001600160401b03811115614bd0575f80fd5b830160808186031215614be1575f80fd5b9150614bef60208401614b2e565b90509250929050565b5f8060408385031215614c09575f80fd5b82359150614bef60208401614b2e565b6001600160a01b038116811461227e575f80fd5b5f805f8060808587031215614c40575f80fd5b843593506020850135614c5281614b21565b9250614c6060408601614b2e565b91506060850135614c7081614c19565b939692955090935050565b6001600160401b038116811461227e575f80fd5b5f60208284031215614c9f575f80fd5b8135611ab281614c7b565b5f8060408385031215614cbb575f80fd5b823591506020830135614ccd81614c19565b809150509250929050565b5f60208284031215614ce8575f80fd5b611ab282614b2e565b803561ffff81168114611885575f80fd5b5f805f60608486031215614d14575f80fd5b83356001600160401b03811115614d29575f80fd5b840160a08187031215614d3a575f80fd5b9250614d4860208501614cf1565b91506040840135614d5881614c7b565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614d8757614d87614d63565b9052565b5f5b83811015614da5578181015183820152602001614d8d565b50505f910152565b5f8151808452614dc4816020860160208601614d8b565b601f01601f19169290920160200192915050565b60208152614dea602082018351614d77565b5f6020830151610100806040850152614e07610120850183614dad565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151614e4660a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f8060208385031215614e9f575f80fd5b82356001600160401b0380821115614eb5575f80fd5b818501915085601f830112614ec8575f80fd5b813581811115614ed6575f80fd5b866020828501011115614ee7575f80fd5b60209290920196919550909350505050565b600181811c90821680614f0d57607f821691505b602082108103614ba457634e487b7160e01b5f52602260045260245ffd5b602081016111a08284614d77565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614f6f57614f6f614f39565b60405290565b604080519081016001600160401b0381118282101715614f6f57614f6f614f39565b604051601f8201601f191681016001600160401b0381118282101715614fbf57614fbf614f39565b604052919050565b5f6001600160401b03821115614fdf57614fdf614f39565b50601f01601f191660200190565b5f82601f830112614ffc575f80fd5b815161500f61500a82614fc7565b614f97565b818152846020838601011115615023575f80fd5b6125ae826020830160208701614d8b565b5f60208284031215615044575f80fd5b81516001600160401b03811115615059575f80fd5b6125ae84828501614fed565b602081525f611ab26020830184614dad565b5f60208284031215615087575f80fd5b5051919050565b5f6020828403121561509e575f80fd5b8135611ab281614c19565b5f808335601e198436030181126150be575f80fd5b8301803591506001600160401b038211156150d7575f80fd5b6020019150600581901b3603821315613936575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615116575f80fd5b9190910192915050565b5f82601f83011261512f575f80fd5b813561513d61500a82614fc7565b818152846020838601011115615151575f80fd5b816020850160208301375f918101602001919091529392505050565b5f6060823603121561517d575f80fd5b615185614f4d565b82356001600160401b038082111561519b575f80fd5b6151a736838701615120565b835260208501359150808211156151bc575f80fd5b506151c936828601615120565b60208301525060408301356151dd81614c7b565b604082015292915050565b5f8251615116818460208701614d8b565b601f8211156107a957805f5260205f20601f840160051c8101602085101561521e5750805b601f840160051c820191505b818110156111b2575f815560010161522a565b81516001600160401b0381111561525657615256614f39565b61526a816152648454614ef9565b846151f9565b602080601f83116001811461529d575f84156152865750858301515b5f19600386901b1c1916600185901b178555611304565b5f85815260208120601f198616915b828110156152cb578886015182559484019460019091019084016152ac565b50858210156152e857878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156126c5576126c56152f8565b5f63ffffffff808316818103615344576153446152f8565b6001019392505050565b6001600160401b03818116838216028082169190828114615371576153716152f8565b505092915050565b5f808335601e1984360301811261538e575f80fd5b83016020810192503590506001600160401b038111156153ac575f80fd5b803603821315613936575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561549757848303601f19018952813536889003605e1901811261541e575f80fd5b8701606061542c8280615379565b82875261543c83880182846153ba565b9250505061544c86830183615379565b8683038888015261545e8382846153ba565b92505050604080830135925061547383614c7b565b6001600160401b0392909216949091019390935297830197908301906001016153f9565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356154c881614c19565b6001600160a01b031660608381019190915283013536849003601e190181126154ef575f80fd5b83016020810190356001600160401b0381111561550a575f80fd5b8060051b360382131561551b575f80fd5b60808085015261552f60a0850182846153e2565b95945050505050565b5f8261555257634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061556b5761556b614d63565b91905290565b80820281158282048414176111a0576111a06152f8565b5f8060408385031215615599575f80fd5b825191506020830151614ccd81614b21565b5f60208083525f84546155bd81614ef9565b806020870152604060018084165f81146155de57600181146155fa57615627565b60ff19851660408a0152604084151560051b8a01019550615627565b895f5260205f205f5b8581101561561e5781548b8201860152908301908801615603565b8a016040019650505b509398975050505050505050565b5f805f60608486031215615647575f80fd5b83519250602084015161565981614c7b565b6040850151909250614d5881614c7b565b818382375f9101908152919050565b6001600160401b038281168282160390808211156126c5576126c56152f8565b5f80604083850312156156aa575f80fd5b82516001600160401b03808211156156c0575f80fd5b90840190606082870312156156d3575f80fd5b6156db614f4d565b8251815260208301516156ed81614c19565b6020820152604083015182811115615703575f80fd5b61570f88828601614fed565b6040830152508094505050506020830151614ccd81614b21565b5f806040838503121561573a575f80fd5b825191506020830151614ccd81614c7b565b808201808211156111a0576111a06152f8565b5f808335601e19843603018112615774575f80fd5b8301803591506001600160401b0382111561578d575f80fd5b602001915036819003821315613936575f80fd5b5f8235603e19833603018112615116575f80fd5b5f604082360312156157c5575f80fd5b6157cd614f75565b6157d683614b2e565b81526020808401356001600160401b03808211156157f2575f80fd5b9085019036601f830112615804575f80fd5b81358181111561581657615816614f39565b8060051b9150615827848301614f97565b8181529183018401918481019036841115615840575f80fd5b938501935b8385101561586a578435925061585a83614c19565b8282529385019390850190615845565b94860194909452509295945050505050565b5f6020828403121561588c575f80fd5b611ab282614cf1565b5f602082840312156158a5575f80fd5b813560ff81168114611ab2575f80fd5b818103818111156111a0576111a06152f8565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156159235784516001600160a01b031682529383019360019290920191908301906158fa565b509695505050505050565b60208152815160208201525f602083015160e06040840152615954610100840182614dad565b90506040840151601f19808584030160608601526159728383614dad565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526159a283836158c8565b925060a08601519150808584030160c0860152506159c082826158c8565b91505060c08401516159dd60e08501826001600160401b03169052565b509392505050565b5f80604083850312156159f6575f80fd5b8251915060208301516001600160401b03811115615a12575f80fd5b615a1e85828601614fed565b9150509250929050565b5f6001600160401b03808316818103615344576153446152f856fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122032091ffc723a6dfec6806a0059316735961b7ecad27a6da2c86224c3a069939664736f6c63430008190033", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. @@ -525,6 +526,37 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerCallerSession) NATIVE return _NativeTokenStakingManager.Contract.NATIVEMINTER(&_NativeTokenStakingManager.CallOpts) } +// NODEIDLENGTH is a free data retrieval call binding the contract method 0x63e2ca97. +// +// Solidity: function NODE_ID_LENGTH() view returns(uint32) +func (_NativeTokenStakingManager *NativeTokenStakingManagerCaller) NODEIDLENGTH(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _NativeTokenStakingManager.contract.Call(opts, &out, "NODE_ID_LENGTH") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// NODEIDLENGTH is a free data retrieval call binding the contract method 0x63e2ca97. +// +// Solidity: function NODE_ID_LENGTH() view returns(uint32) +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) NODEIDLENGTH() (uint32, error) { + return _NativeTokenStakingManager.Contract.NODEIDLENGTH(&_NativeTokenStakingManager.CallOpts) +} + +// NODEIDLENGTH is a free data retrieval call binding the contract method 0x63e2ca97. +// +// Solidity: function NODE_ID_LENGTH() view returns(uint32) +func (_NativeTokenStakingManager *NativeTokenStakingManagerCallerSession) NODEIDLENGTH() (uint32, error) { + return _NativeTokenStakingManager.Contract.NODEIDLENGTH(&_NativeTokenStakingManager.CallOpts) +} + // POSVALIDATORMANAGERSTORAGELOCATION is a free data retrieval call binding the contract method 0xafb98096. // // Solidity: function POS_VALIDATOR_MANAGER_STORAGE_LOCATION() view returns(bytes32) @@ -651,7 +683,7 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerCallerSession) WARPME // GetValidator is a free data retrieval call binding the contract method 0xd5f20ff6. // -// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64)) +// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64,uint64)) func (_NativeTokenStakingManager *NativeTokenStakingManagerCaller) GetValidator(opts *bind.CallOpts, validationID [32]byte) (Validator, error) { var out []interface{} err := _NativeTokenStakingManager.contract.Call(opts, &out, "getValidator", validationID) @@ -668,18 +700,49 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerCaller) GetValidator( // GetValidator is a free data retrieval call binding the contract method 0xd5f20ff6. // -// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64)) +// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64,uint64)) func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) GetValidator(validationID [32]byte) (Validator, error) { return _NativeTokenStakingManager.Contract.GetValidator(&_NativeTokenStakingManager.CallOpts, validationID) } // GetValidator is a free data retrieval call binding the contract method 0xd5f20ff6. // -// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64)) +// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64,uint64)) func (_NativeTokenStakingManager *NativeTokenStakingManagerCallerSession) GetValidator(validationID [32]byte) (Validator, error) { return _NativeTokenStakingManager.Contract.GetValidator(&_NativeTokenStakingManager.CallOpts, validationID) } +// L1TotalWeight is a free data retrieval call binding the contract method 0xbb0b1938. +// +// Solidity: function l1TotalWeight() view returns(uint64) +func (_NativeTokenStakingManager *NativeTokenStakingManagerCaller) L1TotalWeight(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _NativeTokenStakingManager.contract.Call(opts, &out, "l1TotalWeight") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// L1TotalWeight is a free data retrieval call binding the contract method 0xbb0b1938. +// +// Solidity: function l1TotalWeight() view returns(uint64) +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) L1TotalWeight() (uint64, error) { + return _NativeTokenStakingManager.Contract.L1TotalWeight(&_NativeTokenStakingManager.CallOpts) +} + +// L1TotalWeight is a free data retrieval call binding the contract method 0xbb0b1938. +// +// Solidity: function l1TotalWeight() view returns(uint64) +func (_NativeTokenStakingManager *NativeTokenStakingManagerCallerSession) L1TotalWeight() (uint64, error) { + return _NativeTokenStakingManager.Contract.L1TotalWeight(&_NativeTokenStakingManager.CallOpts) +} + // RegisteredValidators is a free data retrieval call binding the contract method 0xfd7ac5e7. // // Solidity: function registeredValidators(bytes nodeID) view returns(bytes32) @@ -711,6 +774,37 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerCallerSession) Regist return _NativeTokenStakingManager.Contract.RegisteredValidators(&_NativeTokenStakingManager.CallOpts, nodeID) } +// SubnetID is a free data retrieval call binding the contract method 0x5dc1f535. +// +// Solidity: function subnetID() view returns(bytes32) +func (_NativeTokenStakingManager *NativeTokenStakingManagerCaller) SubnetID(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _NativeTokenStakingManager.contract.Call(opts, &out, "subnetID") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// SubnetID is a free data retrieval call binding the contract method 0x5dc1f535. +// +// Solidity: function subnetID() view returns(bytes32) +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) SubnetID() ([32]byte, error) { + return _NativeTokenStakingManager.Contract.SubnetID(&_NativeTokenStakingManager.CallOpts) +} + +// SubnetID is a free data retrieval call binding the contract method 0x5dc1f535. +// +// Solidity: function subnetID() view returns(bytes32) +func (_NativeTokenStakingManager *NativeTokenStakingManagerCallerSession) SubnetID() ([32]byte, error) { + return _NativeTokenStakingManager.Contract.SubnetID(&_NativeTokenStakingManager.CallOpts) +} + // ValueToWeight is a free data retrieval call binding the contract method 0x2e2194d8. // // Solidity: function valueToWeight(uint256 value) view returns(uint64) @@ -878,48 +972,69 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) Co return _NativeTokenStakingManager.Contract.CompleteEndDelegation(&_NativeTokenStakingManager.TransactOpts, delegationID, messageIndex) } -// CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. -// -// Solidity: function completeEndValidation(uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) CompleteEndValidation(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "completeEndValidation", messageIndex) -} - -// CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. -// -// Solidity: function completeEndValidation(uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) CompleteEndValidation(messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.CompleteEndValidation(&_NativeTokenStakingManager.TransactOpts, messageIndex) -} - -// CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. -// -// Solidity: function completeEndValidation(uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) CompleteEndValidation(messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.CompleteEndValidation(&_NativeTokenStakingManager.TransactOpts, messageIndex) -} - // CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. // -// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns() +// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns(bytes32) func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) CompleteValidatorRegistration(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { return _NativeTokenStakingManager.contract.Transact(opts, "completeValidatorRegistration", messageIndex) } // CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. // -// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns() +// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns(bytes32) func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) CompleteValidatorRegistration(messageIndex uint32) (*types.Transaction, error) { return _NativeTokenStakingManager.Contract.CompleteValidatorRegistration(&_NativeTokenStakingManager.TransactOpts, messageIndex) } // CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. // -// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns() +// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns(bytes32) func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) CompleteValidatorRegistration(messageIndex uint32) (*types.Transaction, error) { return _NativeTokenStakingManager.Contract.CompleteValidatorRegistration(&_NativeTokenStakingManager.TransactOpts, messageIndex) } +// CompleteValidatorRemoval is a paid mutator transaction binding the contract method 0x9681d940. +// +// Solidity: function completeValidatorRemoval(uint32 messageIndex) returns(bytes32) +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) CompleteValidatorRemoval(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "completeValidatorRemoval", messageIndex) +} + +// CompleteValidatorRemoval is a paid mutator transaction binding the contract method 0x9681d940. +// +// Solidity: function completeValidatorRemoval(uint32 messageIndex) returns(bytes32) +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) CompleteValidatorRemoval(messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.CompleteValidatorRemoval(&_NativeTokenStakingManager.TransactOpts, messageIndex) +} + +// CompleteValidatorRemoval is a paid mutator transaction binding the contract method 0x9681d940. +// +// Solidity: function completeValidatorRemoval(uint32 messageIndex) returns(bytes32) +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) CompleteValidatorRemoval(messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.CompleteValidatorRemoval(&_NativeTokenStakingManager.TransactOpts, messageIndex) +} + +// CompleteValidatorWeightUpdate is a paid mutator transaction binding the contract method 0xce161f14. +// +// Solidity: function completeValidatorWeightUpdate(uint32 messageIndex) returns(bytes32, uint64) +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) CompleteValidatorWeightUpdate(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "completeValidatorWeightUpdate", messageIndex) +} + +// CompleteValidatorWeightUpdate is a paid mutator transaction binding the contract method 0xce161f14. +// +// Solidity: function completeValidatorWeightUpdate(uint32 messageIndex) returns(bytes32, uint64) +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) CompleteValidatorWeightUpdate(messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.CompleteValidatorWeightUpdate(&_NativeTokenStakingManager.TransactOpts, messageIndex) +} + +// CompleteValidatorWeightUpdate is a paid mutator transaction binding the contract method 0xce161f14. +// +// Solidity: function completeValidatorWeightUpdate(uint32 messageIndex) returns(bytes32, uint64) +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) CompleteValidatorWeightUpdate(messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.CompleteValidatorWeightUpdate(&_NativeTokenStakingManager.TransactOpts, messageIndex) +} + // ForceInitializeEndDelegation is a paid mutator transaction binding the contract method 0x1ec44724. // // Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() @@ -1256,9 +1371,9 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) Su return _NativeTokenStakingManager.Contract.SubmitUptimeProof(&_NativeTokenStakingManager.TransactOpts, validationID, messageIndex) } -// 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 +// 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 @@ -1272,7 +1387,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 *NativeTokenStakingManagerCompletedValidatorRegistrationIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1281,7 +1396,7 @@ func (it *NativeTokenStakingManagerDelegationEndedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerDelegationEnded) + it.Event = new(NativeTokenStakingManagerCompletedValidatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1296,7 +1411,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(NativeTokenStakingManagerCompletedValidatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1312,62 +1427,52 @@ func (it *NativeTokenStakingManagerDelegationEndedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerDelegationEndedIterator) Error() error { +func (it *NativeTokenStakingManagerCompletedValidatorRegistrationIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerDelegationEndedIterator) Close() error { +func (it *NativeTokenStakingManagerCompletedValidatorRegistrationIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerDelegationEnded represents a DelegationEnded event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerDelegationEnded struct { - DelegationID [32]byte +// NativeTokenStakingManagerCompletedValidatorRegistration represents a CompletedValidatorRegistration event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerCompletedValidatorRegistration struct { ValidationID [32]byte - Rewards *big.Int - Fees *big.Int + Weight uint64 Raw types.Log // Blockchain specific contextual infos } -// FilterDelegationEnded is a free log retrieval operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. +// FilterCompletedValidatorRegistration is a free log retrieval operation binding the contract event 0x967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06. // -// 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 CompletedValidatorRegistration(bytes32 indexed validationID, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterCompletedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerCompletedValidatorRegistrationIterator, 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, "CompletedValidatorRegistration", validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerDelegationEndedIterator{contract: _NativeTokenStakingManager.contract, event: "DelegationEnded", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerCompletedValidatorRegistrationIterator{contract: _NativeTokenStakingManager.contract, event: "CompletedValidatorRegistration", logs: logs, sub: sub}, nil } -// WatchDelegationEnded is a free log subscription operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. +// WatchCompletedValidatorRegistration is a free log subscription operation binding the contract event 0x967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06. // -// 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 CompletedValidatorRegistration(bytes32 indexed validationID, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchCompletedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerCompletedValidatorRegistration, 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, "CompletedValidatorRegistration", validationIDRule) if err != nil { return nil, err } @@ -1377,8 +1482,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(NativeTokenStakingManagerCompletedValidatorRegistration) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { return err } event.Raw = log @@ -1399,21 +1504,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega }), nil } -// ParseDelegationEnded is a log parse operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. +// ParseCompletedValidatorRegistration is a log parse operation binding the contract event 0x967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06. // -// 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 CompletedValidatorRegistration(bytes32 indexed validationID, 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 } -// 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 +// 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 @@ -1427,7 +1532,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 *NativeTokenStakingManagerCompletedValidatorRemovalIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1436,7 +1541,7 @@ func (it *NativeTokenStakingManagerDelegatorAddedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerDelegatorAdded) + it.Event = new(NativeTokenStakingManagerCompletedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1451,7 +1556,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(NativeTokenStakingManagerCompletedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1467,73 +1572,51 @@ func (it *NativeTokenStakingManagerDelegatorAddedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerDelegatorAddedIterator) Error() error { +func (it *NativeTokenStakingManagerCompletedValidatorRemovalIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerDelegatorAddedIterator) Close() error { +func (it *NativeTokenStakingManagerCompletedValidatorRemovalIterator) 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 +// NativeTokenStakingManagerCompletedValidatorRemoval represents a CompletedValidatorRemoval event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerCompletedValidatorRemoval struct { + ValidationID [32]byte + Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorAdded is a free log retrieval operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. +// FilterCompletedValidatorRemoval is a free log retrieval operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. // -// 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 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) } - 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, "CompletedValidatorRemoval", validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerDelegatorAddedIterator{contract: _NativeTokenStakingManager.contract, event: "DelegatorAdded", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerCompletedValidatorRemovalIterator{contract: _NativeTokenStakingManager.contract, event: "CompletedValidatorRemoval", logs: logs, sub: sub}, nil } -// WatchDelegatorAdded is a free log subscription operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. +// WatchCompletedValidatorRemoval is a free log subscription operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. // -// 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 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) } - 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, "CompletedValidatorRemoval", validationIDRule) if err != nil { return nil, err } @@ -1543,8 +1626,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(NativeTokenStakingManagerCompletedValidatorRemoval) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRemoval", log); err != nil { return err } event.Raw = log @@ -1565,21 +1648,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega }), nil } -// ParseDelegatorAdded is a log parse operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. +// ParseCompletedValidatorRemoval is a log parse operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. // -// 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 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 } -// 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 +// 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 @@ -1593,7 +1676,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 *NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1602,7 +1685,7 @@ func (it *NativeTokenStakingManagerDelegatorRegisteredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerDelegatorRegistered) + it.Event = new(NativeTokenStakingManagerCompletedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1617,7 +1700,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(NativeTokenStakingManagerCompletedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1633,61 +1716,53 @@ func (it *NativeTokenStakingManagerDelegatorRegisteredIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerDelegatorRegisteredIterator) Error() error { +func (it *NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerDelegatorRegisteredIterator) Close() error { +func (it *NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerDelegatorRegistered represents a DelegatorRegistered event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerDelegatorRegistered struct { - DelegationID [32]byte +// NativeTokenStakingManagerCompletedValidatorWeightUpdate represents a CompletedValidatorWeightUpdate event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerCompletedValidatorWeightUpdate struct { ValidationID [32]byte - StartTime *big.Int + Nonce uint64 + Weight uint64 Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorRegistered is a free log retrieval operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. +// FilterCompletedValidatorWeightUpdate is a free log retrieval operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. // -// 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) { +// 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) } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "DelegatorRegistered", delegationIDRule, validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerDelegatorRegisteredIterator{contract: _NativeTokenStakingManager.contract, event: "DelegatorRegistered", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator{contract: _NativeTokenStakingManager.contract, event: "CompletedValidatorWeightUpdate", logs: logs, sub: sub}, nil } -// WatchDelegatorRegistered is a free log subscription operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. +// WatchCompletedValidatorWeightUpdate is a free log subscription operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. // -// 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) { +// 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) } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "DelegatorRegistered", delegationIDRule, validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) if err != nil { return nil, err } @@ -1697,8 +1772,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(NativeTokenStakingManagerCompletedValidatorWeightUpdate) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorWeightUpdate", log); err != nil { return err } event.Raw = log @@ -1719,21 +1794,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega }), nil } -// ParseDelegatorRegistered is a log parse operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. +// ParseCompletedValidatorWeightUpdate is a log parse operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. // -// 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 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 } -// 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 +// 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 contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1747,7 +1822,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 *NativeTokenStakingManagerDelegationEndedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1756,7 +1831,7 @@ func (it *NativeTokenStakingManagerDelegatorRemovalInitializedIterator) Next() b if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerDelegatorRemovalInitialized) + it.Event = new(NativeTokenStakingManagerDelegationEnded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1771,7 +1846,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(NativeTokenStakingManagerDelegationEnded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1787,28 +1862,30 @@ func (it *NativeTokenStakingManagerDelegatorRemovalInitializedIterator) Next() b } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerDelegatorRemovalInitializedIterator) Error() error { +func (it *NativeTokenStakingManagerDelegationEndedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerDelegatorRemovalInitializedIterator) Close() error { +func (it *NativeTokenStakingManagerDelegationEndedIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerDelegatorRemovalInitialized represents a DelegatorRemovalInitialized event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerDelegatorRemovalInitialized struct { +// NativeTokenStakingManagerDelegationEnded represents a DelegationEnded event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerDelegationEnded struct { DelegationID [32]byte ValidationID [32]byte + Rewards *big.Int + Fees *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorRemovalInitialized is a free log retrieval operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. +// FilterDelegationEnded is a free log retrieval operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. // -// 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 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) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -1819,17 +1896,17 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterDeleg validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "DelegationEnded", delegationIDRule, validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerDelegatorRemovalInitializedIterator{contract: _NativeTokenStakingManager.contract, event: "DelegatorRemovalInitialized", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerDelegationEndedIterator{contract: _NativeTokenStakingManager.contract, event: "DelegationEnded", logs: logs, sub: sub}, nil } -// WatchDelegatorRemovalInitialized is a free log subscription operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. +// WatchDelegationEnded is a free log subscription operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. // -// 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 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) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -1840,7 +1917,7 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "DelegationEnded", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -1850,8 +1927,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(NativeTokenStakingManagerDelegationEnded) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegationEnded", log); err != nil { return err } event.Raw = log @@ -1872,21 +1949,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega }), nil } -// ParseDelegatorRemovalInitialized is a log parse operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. +// ParseDelegationEnded is a log parse operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. // -// 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 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 { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerInitialValidatorCreatedIterator is returned from FilterInitialValidatorCreated and is used to iterate over the raw logs and unpacked data for InitialValidatorCreated events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerInitialValidatorCreatedIterator struct { - Event *NativeTokenStakingManagerInitialValidatorCreated // Event containing the contract specifics and raw log +// 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 contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1900,7 +1977,7 @@ type NativeTokenStakingManagerInitialValidatorCreatedIterator 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 *NativeTokenStakingManagerInitialValidatorCreatedIterator) Next() bool { +func (it *NativeTokenStakingManagerDelegatorAddedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1909,7 +1986,7 @@ func (it *NativeTokenStakingManagerInitialValidatorCreatedIterator) Next() bool if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerInitialValidatorCreated) + it.Event = new(NativeTokenStakingManagerDelegatorAdded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1924,7 +2001,7 @@ func (it *NativeTokenStakingManagerInitialValidatorCreatedIterator) Next() bool // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerInitialValidatorCreated) + it.Event = new(NativeTokenStakingManagerDelegatorAdded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1940,53 +2017,73 @@ func (it *NativeTokenStakingManagerInitialValidatorCreatedIterator) Next() bool } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerInitialValidatorCreatedIterator) Error() error { +func (it *NativeTokenStakingManagerDelegatorAddedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerInitialValidatorCreatedIterator) Close() error { +func (it *NativeTokenStakingManagerDelegatorAddedIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerInitialValidatorCreated represents a InitialValidatorCreated event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerInitialValidatorCreated struct { - ValidationID [32]byte - Weight uint64 - NodeID []byte - Raw types.Log // Blockchain specific contextual infos +// 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 } -// FilterInitialValidatorCreated is a free log retrieval operation binding the contract event 0xd80a750132c7a4fb67e226bdfecab0d8609bbb4e48cdad62cee218f25b758fff. +// FilterDelegatorAdded is a free log retrieval operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. // -// Solidity: event InitialValidatorCreated(bytes32 indexed validationID, uint64 weight, bytes nodeID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterInitialValidatorCreated(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerInitialValidatorCreatedIterator, error) { +// 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) { + 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, "InitialValidatorCreated", validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "DelegatorAdded", delegationIDRule, validationIDRule, delegatorAddressRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerInitialValidatorCreatedIterator{contract: _NativeTokenStakingManager.contract, event: "InitialValidatorCreated", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerDelegatorAddedIterator{contract: _NativeTokenStakingManager.contract, event: "DelegatorAdded", logs: logs, sub: sub}, nil } -// WatchInitialValidatorCreated is a free log subscription operation binding the contract event 0xd80a750132c7a4fb67e226bdfecab0d8609bbb4e48cdad62cee218f25b758fff. +// WatchDelegatorAdded is a free log subscription operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. // -// Solidity: event InitialValidatorCreated(bytes32 indexed validationID, uint64 weight, bytes nodeID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitialValidatorCreated(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerInitialValidatorCreated, validationID [][32]byte) (event.Subscription, error) { +// 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) { + 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, "InitialValidatorCreated", validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "DelegatorAdded", delegationIDRule, validationIDRule, delegatorAddressRule) if err != nil { return nil, err } @@ -1996,8 +2093,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitia select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerInitialValidatorCreated) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "InitialValidatorCreated", log); err != nil { + event := new(NativeTokenStakingManagerDelegatorAdded) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegatorAdded", log); err != nil { return err } event.Raw = log @@ -2018,21 +2115,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitia }), nil } -// ParseInitialValidatorCreated is a log parse operation binding the contract event 0xd80a750132c7a4fb67e226bdfecab0d8609bbb4e48cdad62cee218f25b758fff. +// ParseDelegatorAdded is a log parse operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. // -// Solidity: event InitialValidatorCreated(bytes32 indexed validationID, uint64 weight, bytes nodeID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseInitialValidatorCreated(log types.Log) (*NativeTokenStakingManagerInitialValidatorCreated, error) { - event := new(NativeTokenStakingManagerInitialValidatorCreated) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "InitialValidatorCreated", log); err != nil { +// 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 { 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 +// 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 contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -2046,7 +2143,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 *NativeTokenStakingManagerDelegatorRegisteredIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2055,7 +2152,7 @@ func (it *NativeTokenStakingManagerInitializedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerInitialized) + it.Event = new(NativeTokenStakingManagerDelegatorRegistered) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2070,7 +2167,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(NativeTokenStakingManagerDelegatorRegistered) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2086,41 +2183,61 @@ func (it *NativeTokenStakingManagerInitializedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerInitializedIterator) Error() error { +func (it *NativeTokenStakingManagerDelegatorRegisteredIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerInitializedIterator) Close() error { +func (it *NativeTokenStakingManagerDelegatorRegisteredIterator) 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 +// 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 } -// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// FilterDelegatorRegistered is a free log retrieval operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. // -// Solidity: event Initialized(uint64 version) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterInitialized(opts *bind.FilterOpts) (*NativeTokenStakingManagerInitializedIterator, error) { +// 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) { - 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, "DelegatorRegistered", delegationIDRule, validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerInitializedIterator{contract: _NativeTokenStakingManager.contract, event: "Initialized", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerDelegatorRegisteredIterator{contract: _NativeTokenStakingManager.contract, event: "DelegatorRegistered", logs: logs, sub: sub}, nil } -// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// WatchDelegatorRegistered is a free log subscription operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. // -// Solidity: event Initialized(uint64 version) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerInitialized) (event.Subscription, error) { +// 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) { - 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, "DelegatorRegistered", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -2130,8 +2247,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(NativeTokenStakingManagerDelegatorRegistered) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegatorRegistered", log); err != nil { return err } event.Raw = log @@ -2152,21 +2269,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitia }), nil } -// ParseInitialized is a log parse operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// ParseDelegatorRegistered is a log parse operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. // -// 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 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 { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerUptimeUpdatedIterator is returned from FilterUptimeUpdated and is used to iterate over the raw logs and unpacked data for UptimeUpdated events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerUptimeUpdatedIterator struct { - Event *NativeTokenStakingManagerUptimeUpdated // Event containing the contract specifics and raw log +// 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 contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -2180,7 +2297,7 @@ type NativeTokenStakingManagerUptimeUpdatedIterator 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 *NativeTokenStakingManagerUptimeUpdatedIterator) Next() bool { +func (it *NativeTokenStakingManagerDelegatorRemovalInitializedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2189,7 +2306,7 @@ func (it *NativeTokenStakingManagerUptimeUpdatedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerUptimeUpdated) + it.Event = new(NativeTokenStakingManagerDelegatorRemovalInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2204,7 +2321,7 @@ func (it *NativeTokenStakingManagerUptimeUpdatedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerUptimeUpdated) + it.Event = new(NativeTokenStakingManagerDelegatorRemovalInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2220,52 +2337,60 @@ func (it *NativeTokenStakingManagerUptimeUpdatedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerUptimeUpdatedIterator) Error() error { +func (it *NativeTokenStakingManagerDelegatorRemovalInitializedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerUptimeUpdatedIterator) Close() error { +func (it *NativeTokenStakingManagerDelegatorRemovalInitializedIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerUptimeUpdated represents a UptimeUpdated event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerUptimeUpdated struct { +// NativeTokenStakingManagerDelegatorRemovalInitialized represents a DelegatorRemovalInitialized event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerDelegatorRemovalInitialized struct { + DelegationID [32]byte ValidationID [32]byte - Uptime uint64 Raw types.Log // Blockchain specific contextual infos } -// FilterUptimeUpdated is a free log retrieval operation binding the contract event 0xec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435. +// FilterDelegatorRemovalInitialized is a free log retrieval operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. // -// Solidity: event UptimeUpdated(bytes32 indexed validationID, uint64 uptime) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterUptimeUpdated(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerUptimeUpdatedIterator, error) { +// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterDelegatorRemovalInitialized(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*NativeTokenStakingManagerDelegatorRemovalInitializedIterator, 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, "UptimeUpdated", validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerUptimeUpdatedIterator{contract: _NativeTokenStakingManager.contract, event: "UptimeUpdated", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerDelegatorRemovalInitializedIterator{contract: _NativeTokenStakingManager.contract, event: "DelegatorRemovalInitialized", logs: logs, sub: sub}, nil } -// WatchUptimeUpdated is a free log subscription operation binding the contract event 0xec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435. +// WatchDelegatorRemovalInitialized is a free log subscription operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. // -// Solidity: event UptimeUpdated(bytes32 indexed validationID, uint64 uptime) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchUptimeUpdated(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerUptimeUpdated, validationID [][32]byte) (event.Subscription, error) { +// 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) { + 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, "UptimeUpdated", validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -2275,8 +2400,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchUptime select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerUptimeUpdated) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "UptimeUpdated", log); err != nil { + event := new(NativeTokenStakingManagerDelegatorRemovalInitialized) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegatorRemovalInitialized", log); err != nil { return err } event.Raw = log @@ -2297,21 +2422,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchUptime }), nil } -// ParseUptimeUpdated is a log parse operation binding the contract event 0xec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435. +// ParseDelegatorRemovalInitialized is a log parse operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. // -// Solidity: event UptimeUpdated(bytes32 indexed validationID, uint64 uptime) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseUptimeUpdated(log types.Log) (*NativeTokenStakingManagerUptimeUpdated, error) { - event := new(NativeTokenStakingManagerUptimeUpdated) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "UptimeUpdated", log); err != nil { +// 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 { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerValidationPeriodCreatedIterator is returned from FilterValidationPeriodCreated and is used to iterate over the raw logs and unpacked data for ValidationPeriodCreated events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerValidationPeriodCreatedIterator struct { - Event *NativeTokenStakingManagerValidationPeriodCreated // 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 @@ -2325,7 +2450,7 @@ type NativeTokenStakingManagerValidationPeriodCreatedIterator 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 *NativeTokenStakingManagerValidationPeriodCreatedIterator) Next() bool { +func (it *NativeTokenStakingManagerInitializedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2334,7 +2459,7 @@ func (it *NativeTokenStakingManagerValidationPeriodCreatedIterator) Next() bool if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerValidationPeriodCreated) + it.Event = new(NativeTokenStakingManagerInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2349,7 +2474,7 @@ func (it *NativeTokenStakingManagerValidationPeriodCreatedIterator) Next() bool // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerValidationPeriodCreated) + it.Event = new(NativeTokenStakingManagerInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2365,63 +2490,197 @@ func (it *NativeTokenStakingManagerValidationPeriodCreatedIterator) Next() bool } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerValidationPeriodCreatedIterator) Error() error { +func (it *NativeTokenStakingManagerInitializedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerValidationPeriodCreatedIterator) Close() error { +func (it *NativeTokenStakingManagerInitializedIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerValidationPeriodCreated represents a ValidationPeriodCreated event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerValidationPeriodCreated struct { - ValidationID [32]byte - RegisterValidationMessageID [32]byte - Weight uint64 - NodeID []byte - RegistrationExpiry uint64 - 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 } -// FilterValidationPeriodCreated is a free log retrieval operation binding the contract event 0xe093cab27f3fc60439e008f3a2073310d3ac9ac9b7d59e53a06b2588f7498bd6. +// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. // -// Solidity: event ValidationPeriodCreated(bytes32 indexed validationID, bytes32 indexed registerValidationMessageID, uint64 weight, bytes nodeID, uint64 registrationExpiry) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterValidationPeriodCreated(opts *bind.FilterOpts, validationID [][32]byte, registerValidationMessageID [][32]byte) (*NativeTokenStakingManagerValidationPeriodCreatedIterator, error) { +// Solidity: event Initialized(uint64 version) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterInitialized(opts *bind.FilterOpts) (*NativeTokenStakingManagerInitializedIterator, error) { + + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &NativeTokenStakingManagerInitializedIterator{contract: _NativeTokenStakingManager.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// 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, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(NativeTokenStakingManagerInitialized) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitialized is a log parse operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// 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 +} + +// NativeTokenStakingManagerInitiatedValidatorRegistrationIterator is returned from FilterInitiatedValidatorRegistration and is used to iterate over the raw logs and unpacked data for InitiatedValidatorRegistration events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerInitiatedValidatorRegistrationIterator struct { + Event *NativeTokenStakingManagerInitiatedValidatorRegistration // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *NativeTokenStakingManagerInitiatedValidatorRegistrationIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(NativeTokenStakingManagerInitiatedValidatorRegistration) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(NativeTokenStakingManagerInitiatedValidatorRegistration) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *NativeTokenStakingManagerInitiatedValidatorRegistrationIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *NativeTokenStakingManagerInitiatedValidatorRegistrationIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// NativeTokenStakingManagerInitiatedValidatorRegistration represents a InitiatedValidatorRegistration event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerInitiatedValidatorRegistration struct { + ValidationID [32]byte + NodeID [20]byte + RegistrationMessageID [32]byte + RegistrationExpiry uint64 + Weight uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitiatedValidatorRegistration is a free log retrieval operation binding the contract event 0x5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d. +// +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes20 indexed nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterInitiatedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte, nodeID [][20]byte) (*NativeTokenStakingManagerInitiatedValidatorRegistrationIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var registerValidationMessageIDRule []interface{} - for _, registerValidationMessageIDItem := range registerValidationMessageID { - registerValidationMessageIDRule = append(registerValidationMessageIDRule, registerValidationMessageIDItem) + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "ValidationPeriodCreated", validationIDRule, registerValidationMessageIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "InitiatedValidatorRegistration", validationIDRule, nodeIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerValidationPeriodCreatedIterator{contract: _NativeTokenStakingManager.contract, event: "ValidationPeriodCreated", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerInitiatedValidatorRegistrationIterator{contract: _NativeTokenStakingManager.contract, event: "InitiatedValidatorRegistration", logs: logs, sub: sub}, nil } -// WatchValidationPeriodCreated is a free log subscription operation binding the contract event 0xe093cab27f3fc60439e008f3a2073310d3ac9ac9b7d59e53a06b2588f7498bd6. +// WatchInitiatedValidatorRegistration is a free log subscription operation binding the contract event 0x5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d. // -// Solidity: event ValidationPeriodCreated(bytes32 indexed validationID, bytes32 indexed registerValidationMessageID, uint64 weight, bytes nodeID, uint64 registrationExpiry) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValidationPeriodCreated(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerValidationPeriodCreated, validationID [][32]byte, registerValidationMessageID [][32]byte) (event.Subscription, error) { +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes20 indexed nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitiatedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerInitiatedValidatorRegistration, validationID [][32]byte, nodeID [][20]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var registerValidationMessageIDRule []interface{} - for _, registerValidationMessageIDItem := range registerValidationMessageID { - registerValidationMessageIDRule = append(registerValidationMessageIDRule, registerValidationMessageIDItem) + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "ValidationPeriodCreated", validationIDRule, registerValidationMessageIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "InitiatedValidatorRegistration", validationIDRule, nodeIDRule) if err != nil { return nil, err } @@ -2431,8 +2690,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValida select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerValidationPeriodCreated) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "ValidationPeriodCreated", log); err != nil { + event := new(NativeTokenStakingManagerInitiatedValidatorRegistration) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "InitiatedValidatorRegistration", log); err != nil { return err } event.Raw = log @@ -2453,21 +2712,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValida }), nil } -// ParseValidationPeriodCreated is a log parse operation binding the contract event 0xe093cab27f3fc60439e008f3a2073310d3ac9ac9b7d59e53a06b2588f7498bd6. +// ParseInitiatedValidatorRegistration is a log parse operation binding the contract event 0x5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d. // -// Solidity: event ValidationPeriodCreated(bytes32 indexed validationID, bytes32 indexed registerValidationMessageID, uint64 weight, bytes nodeID, uint64 registrationExpiry) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseValidationPeriodCreated(log types.Log) (*NativeTokenStakingManagerValidationPeriodCreated, error) { - event := new(NativeTokenStakingManagerValidationPeriodCreated) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "ValidationPeriodCreated", log); err != nil { +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes20 indexed nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseInitiatedValidatorRegistration(log types.Log) (*NativeTokenStakingManagerInitiatedValidatorRegistration, error) { + event := new(NativeTokenStakingManagerInitiatedValidatorRegistration) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "InitiatedValidatorRegistration", log); err != nil { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerValidationPeriodEndedIterator is returned from FilterValidationPeriodEnded and is used to iterate over the raw logs and unpacked data for ValidationPeriodEnded events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerValidationPeriodEndedIterator struct { - Event *NativeTokenStakingManagerValidationPeriodEnded // Event containing the contract specifics and raw log +// NativeTokenStakingManagerInitiatedValidatorRemovalIterator is returned from FilterInitiatedValidatorRemoval and is used to iterate over the raw logs and unpacked data for InitiatedValidatorRemoval events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerInitiatedValidatorRemovalIterator struct { + Event *NativeTokenStakingManagerInitiatedValidatorRemoval // 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 @@ -2481,7 +2740,7 @@ type NativeTokenStakingManagerValidationPeriodEndedIterator 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 *NativeTokenStakingManagerValidationPeriodEndedIterator) Next() bool { +func (it *NativeTokenStakingManagerInitiatedValidatorRemovalIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2490,7 +2749,7 @@ func (it *NativeTokenStakingManagerValidationPeriodEndedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerValidationPeriodEnded) + it.Event = new(NativeTokenStakingManagerInitiatedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2505,7 +2764,7 @@ func (it *NativeTokenStakingManagerValidationPeriodEndedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerValidationPeriodEnded) + it.Event = new(NativeTokenStakingManagerInitiatedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2521,60 +2780,54 @@ func (it *NativeTokenStakingManagerValidationPeriodEndedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerValidationPeriodEndedIterator) Error() error { +func (it *NativeTokenStakingManagerInitiatedValidatorRemovalIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerValidationPeriodEndedIterator) Close() error { +func (it *NativeTokenStakingManagerInitiatedValidatorRemovalIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerValidationPeriodEnded represents a ValidationPeriodEnded event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerValidationPeriodEnded struct { - ValidationID [32]byte - Status uint8 - Raw types.Log // Blockchain specific contextual infos +// NativeTokenStakingManagerInitiatedValidatorRemoval represents a InitiatedValidatorRemoval event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerInitiatedValidatorRemoval struct { + ValidationID [32]byte + ValidatorWeightMessageID [32]byte + Weight uint64 + EndTime uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterValidationPeriodEnded is a free log retrieval operation binding the contract event 0x1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16. +// FilterInitiatedValidatorRemoval is a free log retrieval operation binding the contract event 0xbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273. // -// Solidity: event ValidationPeriodEnded(bytes32 indexed validationID, uint8 indexed status) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterValidationPeriodEnded(opts *bind.FilterOpts, validationID [][32]byte, status []uint8) (*NativeTokenStakingManagerValidationPeriodEndedIterator, error) { +// Solidity: event InitiatedValidatorRemoval(bytes32 indexed validationID, bytes32 validatorWeightMessageID, uint64 weight, uint64 endTime) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterInitiatedValidatorRemoval(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerInitiatedValidatorRemovalIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var statusRule []interface{} - for _, statusItem := range status { - statusRule = append(statusRule, statusItem) - } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "ValidationPeriodEnded", validationIDRule, statusRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "InitiatedValidatorRemoval", validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerValidationPeriodEndedIterator{contract: _NativeTokenStakingManager.contract, event: "ValidationPeriodEnded", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerInitiatedValidatorRemovalIterator{contract: _NativeTokenStakingManager.contract, event: "InitiatedValidatorRemoval", logs: logs, sub: sub}, nil } -// WatchValidationPeriodEnded is a free log subscription operation binding the contract event 0x1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16. +// WatchInitiatedValidatorRemoval is a free log subscription operation binding the contract event 0xbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273. // -// Solidity: event ValidationPeriodEnded(bytes32 indexed validationID, uint8 indexed status) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValidationPeriodEnded(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerValidationPeriodEnded, validationID [][32]byte, status []uint8) (event.Subscription, error) { +// Solidity: event InitiatedValidatorRemoval(bytes32 indexed validationID, bytes32 validatorWeightMessageID, uint64 weight, uint64 endTime) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitiatedValidatorRemoval(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerInitiatedValidatorRemoval, validationID [][32]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var statusRule []interface{} - for _, statusItem := range status { - statusRule = append(statusRule, statusItem) - } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "ValidationPeriodEnded", validationIDRule, statusRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "InitiatedValidatorRemoval", validationIDRule) if err != nil { return nil, err } @@ -2584,8 +2837,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValida select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerValidationPeriodEnded) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "ValidationPeriodEnded", log); err != nil { + event := new(NativeTokenStakingManagerInitiatedValidatorRemoval) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "InitiatedValidatorRemoval", log); err != nil { return err } event.Raw = log @@ -2606,21 +2859,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValida }), nil } -// ParseValidationPeriodEnded is a log parse operation binding the contract event 0x1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16. +// ParseInitiatedValidatorRemoval is a log parse operation binding the contract event 0xbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273. // -// Solidity: event ValidationPeriodEnded(bytes32 indexed validationID, uint8 indexed status) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseValidationPeriodEnded(log types.Log) (*NativeTokenStakingManagerValidationPeriodEnded, error) { - event := new(NativeTokenStakingManagerValidationPeriodEnded) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "ValidationPeriodEnded", log); err != nil { +// Solidity: event InitiatedValidatorRemoval(bytes32 indexed validationID, bytes32 validatorWeightMessageID, uint64 weight, uint64 endTime) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseInitiatedValidatorRemoval(log types.Log) (*NativeTokenStakingManagerInitiatedValidatorRemoval, error) { + event := new(NativeTokenStakingManagerInitiatedValidatorRemoval) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "InitiatedValidatorRemoval", log); err != nil { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerValidationPeriodRegisteredIterator is returned from FilterValidationPeriodRegistered and is used to iterate over the raw logs and unpacked data for ValidationPeriodRegistered events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerValidationPeriodRegisteredIterator struct { - Event *NativeTokenStakingManagerValidationPeriodRegistered // Event containing the contract specifics and raw log +// NativeTokenStakingManagerInitiatedValidatorWeightUpdateIterator is returned from FilterInitiatedValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for InitiatedValidatorWeightUpdate events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerInitiatedValidatorWeightUpdateIterator struct { + Event *NativeTokenStakingManagerInitiatedValidatorWeightUpdate // 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 @@ -2634,7 +2887,7 @@ type NativeTokenStakingManagerValidationPeriodRegisteredIterator 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 *NativeTokenStakingManagerValidationPeriodRegisteredIterator) Next() bool { +func (it *NativeTokenStakingManagerInitiatedValidatorWeightUpdateIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2643,7 +2896,7 @@ func (it *NativeTokenStakingManagerValidationPeriodRegisteredIterator) Next() bo if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerValidationPeriodRegistered) + it.Event = new(NativeTokenStakingManagerInitiatedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2658,7 +2911,7 @@ func (it *NativeTokenStakingManagerValidationPeriodRegisteredIterator) Next() bo // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerValidationPeriodRegistered) + it.Event = new(NativeTokenStakingManagerInitiatedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2674,53 +2927,54 @@ func (it *NativeTokenStakingManagerValidationPeriodRegisteredIterator) Next() bo } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerValidationPeriodRegisteredIterator) Error() error { +func (it *NativeTokenStakingManagerInitiatedValidatorWeightUpdateIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerValidationPeriodRegisteredIterator) Close() error { +func (it *NativeTokenStakingManagerInitiatedValidatorWeightUpdateIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerValidationPeriodRegistered represents a ValidationPeriodRegistered event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerValidationPeriodRegistered struct { - ValidationID [32]byte - Weight uint64 - Timestamp *big.Int - Raw types.Log // Blockchain specific contextual infos +// NativeTokenStakingManagerInitiatedValidatorWeightUpdate represents a InitiatedValidatorWeightUpdate event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerInitiatedValidatorWeightUpdate struct { + ValidationID [32]byte + Nonce uint64 + WeightUpdateMessageID [32]byte + Weight uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterValidationPeriodRegistered is a free log retrieval operation binding the contract event 0x8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b. +// FilterInitiatedValidatorWeightUpdate is a free log retrieval operation binding the contract event 0x6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d3. // -// Solidity: event ValidationPeriodRegistered(bytes32 indexed validationID, uint64 weight, uint256 timestamp) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterValidationPeriodRegistered(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerValidationPeriodRegisteredIterator, error) { +// Solidity: event InitiatedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, bytes32 weightUpdateMessageID, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterInitiatedValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerInitiatedValidatorWeightUpdateIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "ValidationPeriodRegistered", validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "InitiatedValidatorWeightUpdate", validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerValidationPeriodRegisteredIterator{contract: _NativeTokenStakingManager.contract, event: "ValidationPeriodRegistered", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerInitiatedValidatorWeightUpdateIterator{contract: _NativeTokenStakingManager.contract, event: "InitiatedValidatorWeightUpdate", logs: logs, sub: sub}, nil } -// WatchValidationPeriodRegistered is a free log subscription operation binding the contract event 0x8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b. +// WatchInitiatedValidatorWeightUpdate is a free log subscription operation binding the contract event 0x6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d3. // -// Solidity: event ValidationPeriodRegistered(bytes32 indexed validationID, uint64 weight, uint256 timestamp) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValidationPeriodRegistered(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerValidationPeriodRegistered, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event InitiatedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, bytes32 weightUpdateMessageID, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitiatedValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerInitiatedValidatorWeightUpdate, validationID [][32]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "ValidationPeriodRegistered", validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "InitiatedValidatorWeightUpdate", validationIDRule) if err != nil { return nil, err } @@ -2730,8 +2984,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValida select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerValidationPeriodRegistered) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "ValidationPeriodRegistered", log); err != nil { + event := new(NativeTokenStakingManagerInitiatedValidatorWeightUpdate) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "InitiatedValidatorWeightUpdate", log); err != nil { return err } event.Raw = log @@ -2752,21 +3006,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValida }), nil } -// ParseValidationPeriodRegistered is a log parse operation binding the contract event 0x8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b. +// ParseInitiatedValidatorWeightUpdate is a log parse operation binding the contract event 0x6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d3. // -// Solidity: event ValidationPeriodRegistered(bytes32 indexed validationID, uint64 weight, uint256 timestamp) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseValidationPeriodRegistered(log types.Log) (*NativeTokenStakingManagerValidationPeriodRegistered, error) { - event := new(NativeTokenStakingManagerValidationPeriodRegistered) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "ValidationPeriodRegistered", log); err != nil { +// Solidity: event InitiatedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, bytes32 weightUpdateMessageID, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseInitiatedValidatorWeightUpdate(log types.Log) (*NativeTokenStakingManagerInitiatedValidatorWeightUpdate, error) { + event := new(NativeTokenStakingManagerInitiatedValidatorWeightUpdate) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "InitiatedValidatorWeightUpdate", log); err != nil { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerValidatorRemovalInitializedIterator is returned from FilterValidatorRemovalInitialized and is used to iterate over the raw logs and unpacked data for ValidatorRemovalInitialized events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerValidatorRemovalInitializedIterator struct { - Event *NativeTokenStakingManagerValidatorRemovalInitialized // Event containing the contract specifics and raw log +// NativeTokenStakingManagerRegisteredInitialValidatorIterator is returned from FilterRegisteredInitialValidator and is used to iterate over the raw logs and unpacked data for RegisteredInitialValidator events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerRegisteredInitialValidatorIterator struct { + Event *NativeTokenStakingManagerRegisteredInitialValidator // 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 @@ -2780,7 +3034,7 @@ type NativeTokenStakingManagerValidatorRemovalInitializedIterator 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 *NativeTokenStakingManagerValidatorRemovalInitializedIterator) Next() bool { +func (it *NativeTokenStakingManagerRegisteredInitialValidatorIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2789,7 +3043,7 @@ func (it *NativeTokenStakingManagerValidatorRemovalInitializedIterator) Next() b if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerValidatorRemovalInitialized) + it.Event = new(NativeTokenStakingManagerRegisteredInitialValidator) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2804,7 +3058,7 @@ func (it *NativeTokenStakingManagerValidatorRemovalInitializedIterator) Next() b // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerValidatorRemovalInitialized) + it.Event = new(NativeTokenStakingManagerRegisteredInitialValidator) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2820,62 +3074,61 @@ func (it *NativeTokenStakingManagerValidatorRemovalInitializedIterator) Next() b } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerValidatorRemovalInitializedIterator) Error() error { +func (it *NativeTokenStakingManagerRegisteredInitialValidatorIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerValidatorRemovalInitializedIterator) Close() error { +func (it *NativeTokenStakingManagerRegisteredInitialValidatorIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerValidatorRemovalInitialized represents a ValidatorRemovalInitialized event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerValidatorRemovalInitialized struct { - ValidationID [32]byte - SetWeightMessageID [32]byte - Weight uint64 - EndTime *big.Int - Raw types.Log // Blockchain specific contextual infos +// NativeTokenStakingManagerRegisteredInitialValidator represents a RegisteredInitialValidator event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerRegisteredInitialValidator struct { + ValidationID [32]byte + NodeID [20]byte + Weight uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterValidatorRemovalInitialized is a free log retrieval operation binding the contract event 0xfbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42. +// FilterRegisteredInitialValidator is a free log retrieval operation binding the contract event 0x9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d7. // -// Solidity: event ValidatorRemovalInitialized(bytes32 indexed validationID, bytes32 indexed setWeightMessageID, uint64 weight, uint256 endTime) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterValidatorRemovalInitialized(opts *bind.FilterOpts, validationID [][32]byte, setWeightMessageID [][32]byte) (*NativeTokenStakingManagerValidatorRemovalInitializedIterator, error) { +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterRegisteredInitialValidator(opts *bind.FilterOpts, validationID [][32]byte, nodeID [][20]byte) (*NativeTokenStakingManagerRegisteredInitialValidatorIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var setWeightMessageIDRule []interface{} - for _, setWeightMessageIDItem := range setWeightMessageID { - setWeightMessageIDRule = append(setWeightMessageIDRule, setWeightMessageIDItem) + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "ValidatorRemovalInitialized", validationIDRule, setWeightMessageIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "RegisteredInitialValidator", validationIDRule, nodeIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerValidatorRemovalInitializedIterator{contract: _NativeTokenStakingManager.contract, event: "ValidatorRemovalInitialized", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerRegisteredInitialValidatorIterator{contract: _NativeTokenStakingManager.contract, event: "RegisteredInitialValidator", logs: logs, sub: sub}, nil } -// WatchValidatorRemovalInitialized is a free log subscription operation binding the contract event 0xfbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42. +// WatchRegisteredInitialValidator is a free log subscription operation binding the contract event 0x9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d7. // -// Solidity: event ValidatorRemovalInitialized(bytes32 indexed validationID, bytes32 indexed setWeightMessageID, uint64 weight, uint256 endTime) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValidatorRemovalInitialized(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerValidatorRemovalInitialized, validationID [][32]byte, setWeightMessageID [][32]byte) (event.Subscription, error) { +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchRegisteredInitialValidator(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerRegisteredInitialValidator, validationID [][32]byte, nodeID [][20]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var setWeightMessageIDRule []interface{} - for _, setWeightMessageIDItem := range setWeightMessageID { - setWeightMessageIDRule = append(setWeightMessageIDRule, setWeightMessageIDItem) + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "ValidatorRemovalInitialized", validationIDRule, setWeightMessageIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "RegisteredInitialValidator", validationIDRule, nodeIDRule) if err != nil { return nil, err } @@ -2885,8 +3138,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValida select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerValidatorRemovalInitialized) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "ValidatorRemovalInitialized", log); err != nil { + event := new(NativeTokenStakingManagerRegisteredInitialValidator) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "RegisteredInitialValidator", log); err != nil { return err } event.Raw = log @@ -2907,21 +3160,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValida }), nil } -// ParseValidatorRemovalInitialized is a log parse operation binding the contract event 0xfbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42. +// ParseRegisteredInitialValidator is a log parse operation binding the contract event 0x9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d7. // -// Solidity: event ValidatorRemovalInitialized(bytes32 indexed validationID, bytes32 indexed setWeightMessageID, uint64 weight, uint256 endTime) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseValidatorRemovalInitialized(log types.Log) (*NativeTokenStakingManagerValidatorRemovalInitialized, error) { - event := new(NativeTokenStakingManagerValidatorRemovalInitialized) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "ValidatorRemovalInitialized", log); err != nil { +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseRegisteredInitialValidator(log types.Log) (*NativeTokenStakingManagerRegisteredInitialValidator, error) { + event := new(NativeTokenStakingManagerRegisteredInitialValidator) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "RegisteredInitialValidator", log); err != nil { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerValidatorWeightUpdateIterator is returned from FilterValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for ValidatorWeightUpdate events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerValidatorWeightUpdateIterator struct { - Event *NativeTokenStakingManagerValidatorWeightUpdate // Event containing the contract specifics and raw log +// NativeTokenStakingManagerUptimeUpdatedIterator is returned from FilterUptimeUpdated and is used to iterate over the raw logs and unpacked data for UptimeUpdated events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerUptimeUpdatedIterator struct { + Event *NativeTokenStakingManagerUptimeUpdated // 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 @@ -2935,7 +3188,7 @@ type NativeTokenStakingManagerValidatorWeightUpdateIterator 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 *NativeTokenStakingManagerValidatorWeightUpdateIterator) Next() bool { +func (it *NativeTokenStakingManagerUptimeUpdatedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2944,7 +3197,7 @@ func (it *NativeTokenStakingManagerValidatorWeightUpdateIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerValidatorWeightUpdate) + it.Event = new(NativeTokenStakingManagerUptimeUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2959,7 +3212,7 @@ func (it *NativeTokenStakingManagerValidatorWeightUpdateIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerValidatorWeightUpdate) + it.Event = new(NativeTokenStakingManagerUptimeUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2975,62 +3228,52 @@ func (it *NativeTokenStakingManagerValidatorWeightUpdateIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerValidatorWeightUpdateIterator) Error() error { +func (it *NativeTokenStakingManagerUptimeUpdatedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerValidatorWeightUpdateIterator) Close() error { +func (it *NativeTokenStakingManagerUptimeUpdatedIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerValidatorWeightUpdate represents a ValidatorWeightUpdate event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerValidatorWeightUpdate struct { - ValidationID [32]byte - Nonce uint64 - Weight uint64 - SetWeightMessageID [32]byte - Raw types.Log // Blockchain specific contextual infos +// NativeTokenStakingManagerUptimeUpdated represents a UptimeUpdated event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerUptimeUpdated struct { + ValidationID [32]byte + Uptime uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterValidatorWeightUpdate is a free log retrieval operation binding the contract event 0x07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df. +// FilterUptimeUpdated is a free log retrieval operation binding the contract event 0xec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435. // -// Solidity: event ValidatorWeightUpdate(bytes32 indexed validationID, uint64 indexed nonce, uint64 weight, bytes32 setWeightMessageID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte, nonce []uint64) (*NativeTokenStakingManagerValidatorWeightUpdateIterator, error) { +// Solidity: event UptimeUpdated(bytes32 indexed validationID, uint64 uptime) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterUptimeUpdated(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerUptimeUpdatedIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var nonceRule []interface{} - for _, nonceItem := range nonce { - nonceRule = append(nonceRule, nonceItem) - } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "ValidatorWeightUpdate", validationIDRule, nonceRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "UptimeUpdated", validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerValidatorWeightUpdateIterator{contract: _NativeTokenStakingManager.contract, event: "ValidatorWeightUpdate", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerUptimeUpdatedIterator{contract: _NativeTokenStakingManager.contract, event: "UptimeUpdated", logs: logs, sub: sub}, nil } -// WatchValidatorWeightUpdate is a free log subscription operation binding the contract event 0x07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df. +// WatchUptimeUpdated is a free log subscription operation binding the contract event 0xec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435. // -// Solidity: event ValidatorWeightUpdate(bytes32 indexed validationID, uint64 indexed nonce, uint64 weight, bytes32 setWeightMessageID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerValidatorWeightUpdate, validationID [][32]byte, nonce []uint64) (event.Subscription, error) { +// Solidity: event UptimeUpdated(bytes32 indexed validationID, uint64 uptime) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchUptimeUpdated(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerUptimeUpdated, validationID [][32]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var nonceRule []interface{} - for _, nonceItem := range nonce { - nonceRule = append(nonceRule, nonceItem) - } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "ValidatorWeightUpdate", validationIDRule, nonceRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "UptimeUpdated", validationIDRule) if err != nil { return nil, err } @@ -3040,8 +3283,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValida select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerValidatorWeightUpdate) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "ValidatorWeightUpdate", log); err != nil { + event := new(NativeTokenStakingManagerUptimeUpdated) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "UptimeUpdated", log); err != nil { return err } event.Raw = log @@ -3062,12 +3305,12 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValida }), nil } -// ParseValidatorWeightUpdate is a log parse operation binding the contract event 0x07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df. +// ParseUptimeUpdated is a log parse operation binding the contract event 0xec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435. // -// Solidity: event ValidatorWeightUpdate(bytes32 indexed validationID, uint64 indexed nonce, uint64 weight, bytes32 setWeightMessageID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseValidatorWeightUpdate(log types.Log) (*NativeTokenStakingManagerValidatorWeightUpdate, error) { - event := new(NativeTokenStakingManagerValidatorWeightUpdate) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "ValidatorWeightUpdate", log); err != nil { +// Solidity: event UptimeUpdated(bytes32 indexed validationID, uint64 uptime) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseUptimeUpdated(log types.Log) (*NativeTokenStakingManagerUptimeUpdated, error) { + event := new(NativeTokenStakingManagerUptimeUpdated) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "UptimeUpdated", log); err != nil { return nil, err } event.Raw = log @@ -3077,7 +3320,7 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseValida // 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: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea26469706673582212207a0b6ee4bb75144dd6b8635b3883de8d9364507951a0e3d076ca36181dac9a1764736f6c63430008190033", + Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea2646970667358221220e6b22cfbb2dc3686c9e5d5c46b42e65620ca6777a1371e31c12b720ad3c60ea464736f6c63430008190033", } // ValidatorMessagesABI 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 202bbb8c5..158752fb4 100644 --- a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go +++ b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go @@ -55,10 +55,11 @@ type Validator struct { Status uint8 NodeID []byte StartingWeight uint64 - MessageNonce uint64 + SentNonce uint64 + ReceivedNonce uint64 Weight uint64 - StartedAt uint64 - EndedAt uint64 + StartTime uint64 + EndTime uint64 } // ValidatorManagerSettings is an auto generated low-level Go binding around an user-defined struct. @@ -90,8 +91,8 @@ 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\":\"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\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"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\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"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\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"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\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"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\":\"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\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b506040516137f33803806137f383398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6136a68061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610127575f3560e01c8063a3a65e48116100a9578063d588c18f1161006e578063d588c18f14610279578063d5f20ff61461028c578063df93d8de146102ac578063f2fde38b146102ce578063fd7ac5e7146102e1575f80fd5b8063a3a65e4814610229578063b771b3bc1461023c578063bc5fbfec1461024a578063bee0a03f1461025e578063c974d1b614610271575f80fd5b8063732214f8116100ef578063732214f8146101905780638280a25a146101a55780638da5cb5b146101bf57806397fb70d4146102035780639ba96b8614610216575f80fd5b80630322ed981461012b57806320d91b7a14610140578063467ef06f1461015357806360305d6214610166578063715018a614610188575b5f80fd5b61013e61013936600461279d565b6102f4565b005b61013e61014e3660046127cc565b610584565b61013e61016136600461281a565b610b28565b61016e601481565b60405163ffffffff90911681526020015b60405180910390f35b61013e610b36565b6101975f81565b60405190815260200161017f565b6101ad603081565b60405160ff909116815260200161017f565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161017f565b61013e61021136600461279d565b610b49565b610197610224366004612849565b610b5e565b61013e61023736600461281a565b610b7a565b6101eb6005600160991b0181565b6101975f8051602061363183398151915281565b61013e61026c36600461279d565b610d70565b6101ad601481565b61013e6102873660046128a2565b610eac565b61029f61029a36600461279d565b610fba565b60405161017f919061295f565b6102b66202a30081565b6040516001600160401b03909116815260200161017f565b61013e6102dc3660046129df565b611109565b6101976102ef366004612a01565b611146565b5f8181525f805160206136518339815191526020526040808220815160e0810190925280545f8051602061363183398151915293929190829060ff166005811115610341576103416128de565b6005811115610352576103526128de565b815260200160018201805461036690612a6c565b80601f016020809104026020016040519081016040528092919081815260200182805461039290612a6c565b80156103dd5780601f106103b4576101008083540402835291602001916103dd565b820191905f5260205f20905b8154815290600101906020018083116103c057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115610448576104486128de565b14610484575f8381526005830160205260409081902054905163170cc93360e21b815261047b9160ff1690600401612aa4565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156104fb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105229190810190612bb5565b6040518263ffffffff1660e01b815260040161053e9190612be6565b6020604051808303815f875af115801561055a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061057e9190612bf8565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206136318339815191529060ff16156105d657604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610619573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063d9190612bf8565b836020013514610666576040516372b0a7e760e11b81526020840135600482015260240161047b565b3061067760608501604086016129df565b6001600160a01b0316146106ba5761069560608401604085016129df565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161047b565b5f6106c86060850185612c0f565b905090505f805b828163ffffffff161015610919575f6106eb6060880188612c0f565b8363ffffffff1681811061070157610701612c54565b90506020028101906107139190612c68565b61071c90612cd3565b80516040519192505f91600688019161073491612d4c565b9081526020016040518091039020541461076457805160405163a41f772f60e01b815261047b9190600401612be6565b5f6002885f01358460405160200161079392919091825260e01b6001600160e01b031916602082015260240190565b60408051601f19818403018152908290526107ad91612d4c565b602060405180830381855afa1580156107c8573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906107eb9190612bf8565b90508086600601835f01516040516108039190612d4c565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906108439082612da8565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b039485166001600160c01b031990941693909317600160801b85851602176001600160c01b0316600160c01b429590951694909402939093179092556003909101805467ffffffffffffffff191690556108c39085612e7b565b9350807fd80a750132c7a4fb67e226bdfecab0d8609bbb4e48cdad62cee218f25b758fff8360400151845f01516040516108fe929190612e9b565b60405180910390a250508061091290612ebc565b90506106cf565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b0384168102919091179091556001840154606491610961910460ff1683612ede565b6001600160401b0316101561099457604051633e1a785160e01b81526001600160401b038216600482015260240161047b565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d8478846109b8876111a1565b604001516040518263ffffffff1660e01b81526004016109d89190612be6565b602060405180830381865af41580156109f3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a179190612bf8565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610a51919061302c565b5f60405180830381865af4158015610a6b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610a929190810190612bb5565b90505f600282604051610aa59190612d4c565b602060405180830381855afa158015610ac0573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610ae39190612bf8565b9050828114610b0f5760405163baaea89d60e01b8152600481018290526024810184905260440161047b565b5050506007909201805460ff1916600117905550505050565b610b31816112b7565b505050565b610b3e61166f565b610b475f6116ca565b565b610b5161166f565b610b5a8161173a565b5050565b5f610b6761166f565b610b718383611a1f565b90505b92915050565b5f805160206136318339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610bad866111a1565b604001516040518263ffffffff1660e01b8152600401610bcd9190612be6565b6040805180830381865af4158015610be7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c0b91906130cf565b9150915080610c3157604051632d07135360e01b8152811515600482015260240161047b565b5f82815260048401602052604090208054610c4b90612a6c565b90505f03610c6f5760405163089938b360e11b81526004810183905260240161047b565b60015f838152600580860160205260409091205460ff1690811115610c9657610c966128de565b14610cc9575f8281526005840160205260409081902054905163170cc93360e21b815261047b9160ff1690600401612aa4565b5f8281526004840160205260408120610ce191612711565b5f828152600584016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917f8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b910160405180910390a250505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206136318339815191529190610db790612a6c565b90505f03610ddb5760405163089938b360e11b81526004810183905260240161047b565b60015f838152600580840160205260409091205460ff1690811115610e0257610e026128de565b14610e35575f8281526005820160205260409081902054905163170cc93360e21b815261047b9160ff1690600401612aa4565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92610e6c92016130f0565b6020604051808303815f875af1158015610e88573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b319190612bf8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610ef05750825b90505f826001600160401b03166001148015610f0b5750303b155b905081158015610f19575080155b15610f375760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610f6157845460ff60401b1916600160401b1785555b610f6b8787611f6d565b8315610fb157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610fc2612748565b5f8281525f80516020613651833981519152602052604090819020815160e0810190925280545f80516020613631833981519152929190829060ff16600581111561100f5761100f6128de565b6005811115611020576110206128de565b815260200160018201805461103490612a6c565b80601f016020809104026020016040519081016040528092919081815260200182805461106090612a6c565b80156110ab5780601f10611082576101008083540402835291602001916110ab565b820191905f5260205f20905b81548152906001019060200180831161108e57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b61111161166f565b6001600160a01b03811661113a57604051631e4fbdf760e01b81525f600482015260240161047b565b611143816116ca565b50565b6040515f905f80516020613631833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0690611189908690869061317a565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611205573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261122c9190810190613189565b915091508061124e57604051636b2f19e960e01b815260040160405180910390fd5b815115611274578151604051636ba589a560e01b8152600481019190915260240161047b565b60208201516001600160a01b0316156112b0576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161047b565b5092915050565b5f6112c0612748565b5f805160206136318339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6112f3886111a1565b604001516040518263ffffffff1660e01b81526004016113139190612be6565b6040805180830381865af415801561132d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061135191906130cf565b91509150801561137857604051632d07135360e01b8152811515600482015260240161047b565b5f82815260058085016020526040808320815160e08101909252805491929091839160ff909116908111156113af576113af6128de565b60058111156113c0576113c06128de565b81526020016001820180546113d490612a6c565b80601f016020809104026020016040519081016040528092919081815260200182805461140090612a6c565b801561144b5780601f106114225761010080835404028352916020019161144b565b820191905f5260205f20905b81548152906001019060200180831161142e57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156114b6576114b66128de565b141580156114d757506001815160058111156114d4576114d46128de565b14155b156114f857805160405163170cc93360e21b815261047b9190600401612aa4565b60038151600581111561150d5761150d6128de565b0361151b5760048152611520565b600581525b8360060181602001516040516115369190612d4c565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff1916906001908490811115611579576115796128de565b0217905550602082015160018201906115929082612da8565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115611638576116386128de565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b336116a17f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610b475760405163118cdaa760e01b815233600482015260240161047b565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b611742612748565b5f8281525f805160206136518339815191526020526040808220815160e0810190925280545f8051602061363183398151915293929190829060ff16600581111561178f5761178f6128de565b60058111156117a0576117a06128de565b81526020016001820180546117b490612a6c565b80601f01602080910402602001604051908101604052809291908181526020018280546117e090612a6c565b801561182b5780601f106118025761010080835404028352916020019161182b565b820191905f5260205f20905b81548152906001019060200180831161180e57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115611899576118996128de565b146118cc575f8481526005830160205260409081902054905163170cc93360e21b815261047b9160ff1690600401612aa4565b60038152426001600160401b031660c08201525f84815260058381016020526040909120825181548493839160ff1916906001908490811115611911576119116128de565b02179055506020820151600182019061192a9082612da8565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6119c88582611f87565b6080840151604080516001600160401b03909216825242602083015291935083925087917ffbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42910160405180910390a3509392505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16611a6357604051637fab81e560e01b815260040160405180910390fd5b5f8051602061363183398151915242611a826060860160408701613216565b6001600160401b0316111580611abc5750611aa06202a3004261322f565b611ab06060860160408701613216565b6001600160401b031610155b15611af657611ad16060850160408601613216565b604051635879da1360e11b81526001600160401b03909116600482015260240161047b565b60038101546001600160401b0390611b1990600160401b9004821685831661322f565b1115611b4357604051633e1a785160e01b81526001600160401b038416600482015260240161047b565b611b58611b536060860186613242565b61215e565b611b68611b536080860186613242565b6030611b776020860186613256565b905014611ba957611b8b6020850185613256565b6040516326475b2f60e11b815261047b925060040190815260200190565b611bb38480613256565b90505f03611be057611bc58480613256565b604051633e08a12560e11b815260040161047b929190613298565b5f60068201611bef8680613256565b604051611bfd92919061317a565b90815260200160405180910390205414611c3657611c1b8480613256565b60405163a41f772f60e01b815260040161047b929190613298565b611c40835f6122c7565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101611c7d8a80613256565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190611cc5908b018b613256565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001611d0e60608b0160408c01613216565b6001600160401b03168152602001611d2960608b018b613242565b611d32906132ab565b8152602001611d4460808b018b613242565b611d4d906132ab565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611d7b91906133d8565b5f60405180830381865af4158015611d95573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611dbc919081019061348f565b5f82815260048601602052604090209193509150611dda8282612da8565b508160068401611dea8880613256565b604051611df892919061317a565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611e34908590600401612be6565b6020604051808303815f875af1158015611e50573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e749190612bf8565b5f8481526005860160205260409020805460ff191660011790559050611e9a8780613256565b5f858152600587016020526040902060010191611eb89190836134d2565b505f83815260058501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580837fe093cab27f3fc60439e008f3a2073310d3ac9ac9b7d59e53a06b2588f7498bd688611f3a8b80613256565b611f4a60608e0160408f01613216565b604051611f5a949392919061358b565b60405180910390a3509095945050505050565b611f75612531565b611f7e8261257a565b610b5a81612593565b5f8281525f80516020613651833981519152602052604081206002015481905f8051602061363183398151915290600160801b90046001600160401b0316611fcf85826122c7565b5f611fd9876125a4565b5f888152600585016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015612082573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526120a99190810190612bb5565b6040518263ffffffff1660e01b81526004016120c59190612be6565b6020604051808303815f875af11580156120e1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121059190612bf8565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b61216b602082018261281a565b63ffffffff1615801561218b57506121866020820182612c0f565b151590505b156121d25761219d602082018261281a565b6121aa6020830183612c0f565b60405163c08a0f1d60e01b815263ffffffff909316600484015260248301525060440161047b565b6121df6020820182612c0f565b90506121ee602083018361281a565b63ffffffff1611156122075761219d602082018261281a565b60015b6122176020830183612c0f565b9050811015610b5a5761222d6020830183612c0f565b6122386001846135c2565b81811061224757612247612c54565b905060200201602081019061225c91906129df565b6001600160a01b03166122726020840184612c0f565b8381811061228257612282612c54565b905060200201602081019061229791906129df565b6001600160a01b031610156122bf57604051630dbc8d5f60e31b815260040160405180910390fd5b60010161220a565b5f805160206136318339815191525f6001600160401b0380841690851611156122fb576122f483856135d5565b9050612308565b61230584846135d5565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b9004909216606082015242911580612375575060018401548151612371916001600160401b03169061322f565b8210155b1561239d576001600160401b03808416606083015282825260408201511660208201526123bc565b82816060018181516123af9190612e7b565b6001600160401b03169052505b60608101516123cc906064612ede565b602082015160018601546001600160401b0392909216916123f79190600160401b900460ff16612ede565b6001600160401b0316101561243057606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161047b565b85816040018181516124429190612e7b565b6001600160401b03169052506040810180518691906124629083906135d5565b6001600160401b03169052506001840154604082015160649161249091600160401b90910460ff1690612ede565b6001600160401b031610156124c9576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161047b565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610b4757604051631afcd79f60e31b815260040160405180910390fd5b612582612531565b61258a612619565b61114381612621565b61259b612531565b61114381612709565b5f8181525f805160206136518339815191526020526040812060020180545f8051602061363183398151915291906008906125ee90600160401b90046001600160401b03166135f5565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610b47612531565b612629612531565b80355f80516020613631833981519152908155601461264e6060840160408501613610565b60ff16118061266d57506126686060830160408401613610565b60ff16155b156126a1576126826060830160408401613610565b604051634a59bbff60e11b815260ff909116600482015260240161047b565b6126b16060830160408401613610565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556126e26040830160208401613216565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b611111612531565b50805461271d90612a6c565b5f825580601f1061272c575050565b601f0160209004905f5260205f20908101906111439190612785565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115612799575f8155600101612786565b5090565b5f602082840312156127ad575f80fd5b5035919050565b803563ffffffff811681146127c7575f80fd5b919050565b5f80604083850312156127dd575f80fd5b82356001600160401b038111156127f2575f80fd5b830160808186031215612803575f80fd5b9150612811602084016127b4565b90509250929050565b5f6020828403121561282a575f80fd5b610b71826127b4565b80356001600160401b03811681146127c7575f80fd5b5f806040838503121561285a575f80fd5b82356001600160401b0381111561286f575f80fd5b830160a08186031215612880575f80fd5b915061281160208401612833565b6001600160a01b0381168114611143575f80fd5b5f8082840360808112156128b4575f80fd5b60608112156128c1575f80fd5b5082915060608301356128d38161288e565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b6006811061290e57634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b8381101561292c578181015183820152602001612914565b50505f910152565b5f815180845261294b816020860160208601612912565b601f01601f19169290920160200192915050565b602081526129716020820183516128f2565b5f602083015160e0604084015261298c610100840182612934565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f602082840312156129ef575f80fd5b81356129fa8161288e565b9392505050565b5f8060208385031215612a12575f80fd5b82356001600160401b0380821115612a28575f80fd5b818501915085601f830112612a3b575f80fd5b813581811115612a49575f80fd5b866020828501011115612a5a575f80fd5b60209290920196919550909350505050565b600181811c90821680612a8057607f821691505b602082108103612a9e57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610b7482846128f2565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612ae857612ae8612ab2565b60405290565b604080519081016001600160401b0381118282101715612ae857612ae8612ab2565b604051601f8201601f191681016001600160401b0381118282101715612b3857612b38612ab2565b604052919050565b5f6001600160401b03821115612b5857612b58612ab2565b50601f01601f191660200190565b5f82601f830112612b75575f80fd5b8151612b88612b8382612b40565b612b10565b818152846020838601011115612b9c575f80fd5b612bad826020830160208701612912565b949350505050565b5f60208284031215612bc5575f80fd5b81516001600160401b03811115612bda575f80fd5b612bad84828501612b66565b602081525f610b716020830184612934565b5f60208284031215612c08575f80fd5b5051919050565b5f808335601e19843603018112612c24575f80fd5b8301803591506001600160401b03821115612c3d575f80fd5b6020019150600581901b3603821315612157575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612c7c575f80fd5b9190910192915050565b5f82601f830112612c95575f80fd5b8135612ca3612b8382612b40565b818152846020838601011115612cb7575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612ce3575f80fd5b612ceb612ac6565b82356001600160401b0380821115612d01575f80fd5b612d0d36838701612c86565b83526020850135915080821115612d22575f80fd5b50612d2f36828601612c86565b602083015250612d4160408401612833565b604082015292915050565b5f8251612c7c818460208701612912565b601f821115610b3157805f5260205f20601f840160051c81016020851015612d825750805b601f840160051c820191505b81811015612da1575f8155600101612d8e565b5050505050565b81516001600160401b03811115612dc157612dc1612ab2565b612dd581612dcf8454612a6c565b84612d5d565b602080601f831160018114612e08575f8415612df15750858301515b5f19600386901b1c1916600185901b178555612e5f565b5f85815260208120601f198616915b82811015612e3657888601518255948401946001909101908401612e17565b5085821015612e5357878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156112b0576112b0612e67565b6001600160401b0383168152604060208201525f612bad6040830184612934565b5f63ffffffff808316818103612ed457612ed4612e67565b6001019392505050565b6001600160401b03818116838216028082169190828114612f0157612f01612e67565b505092915050565b5f808335601e19843603018112612f1e575f80fd5b83016020810192503590506001600160401b03811115612f3c575f80fd5b803603821315612157575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561301f57848303601f19018952813536889003605e19018112612fae575f80fd5b87016060612fbc8280612f09565b828752612fcc8388018284612f4a565b92505050612fdc86830183612f09565b86830388880152612fee838284612f4a565b9250505060406001600160401b03613007828501612833565b16950194909452509783019790830190600101612f89565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356130508161288e565b6001600160a01b031660608381019190915283013536849003601e19018112613077575f80fd5b83016020810190356001600160401b03811115613092575f80fd5b8060051b36038213156130a3575f80fd5b6080808501526130b760a085018284612f72565b95945050505050565b805180151581146127c7575f80fd5b5f80604083850312156130e0575f80fd5b82519150612811602084016130c0565b5f60208083525f845461310281612a6c565b806020870152604060018084165f8114613123576001811461313f5761316c565b60ff19851660408a0152604084151560051b8a0101955061316c565b895f5260205f205f5b858110156131635781548b8201860152908301908801613148565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b5f806040838503121561319a575f80fd5b82516001600160401b03808211156131b0575f80fd5b90840190606082870312156131c3575f80fd5b6131cb612ac6565b8251815260208301516131dd8161288e565b60208201526040830151828111156131f3575f80fd5b6131ff88828601612b66565b6040830152509350612811915050602084016130c0565b5f60208284031215613226575f80fd5b610b7182612833565b80820180821115610b7457610b74612e67565b5f8235603e19833603018112612c7c575f80fd5b5f808335601e1984360301811261326b575f80fd5b8301803591506001600160401b03821115613284575f80fd5b602001915036819003821315612157575f80fd5b602081525f612bad602083018486612f4a565b5f604082360312156132bb575f80fd5b6132c3612aee565b6132cc836127b4565b81526020808401356001600160401b03808211156132e8575f80fd5b9085019036601f8301126132fa575f80fd5b81358181111561330c5761330c612ab2565b8060051b915061331d848301612b10565b8181529183018401918481019036841115613336575f80fd5b938501935b8385101561336057843592506133508361288e565b828252938501939085019061333b565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156133cd5784516001600160a01b031682529383019360019290920191908301906133a4565b509695505050505050565b60208152815160208201525f602083015160e060408401526133fe610100840182612934565b90506040840151601f198085840301606086015261341c8383612934565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261344c8383613372565b925060a08601519150808584030160c08601525061346a8282613372565b91505060c084015161348760e08501826001600160401b03169052565b509392505050565b5f80604083850312156134a0575f80fd5b8251915060208301516001600160401b038111156134bc575f80fd5b6134c885828601612b66565b9150509250929050565b6001600160401b038311156134e9576134e9612ab2565b6134fd836134f78354612a6c565b83612d5d565b5f601f84116001811461352e575f85156135175750838201355b5f19600387901b1c1916600186901b178355612da1565b5f83815260208120601f198716915b8281101561355d578685013582556020948501946001909201910161353d565b5086821015613579575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b038087168352606060208401526135ae606084018688612f4a565b915080841660408401525095945050505050565b81810381811115610b7457610b74612e67565b6001600160401b038281168282160390808211156112b0576112b0612e67565b5f6001600160401b03808316818103612ed457612ed4612e67565b5f60208284031215613620575f80fd5b813560ff811681146129fa575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a26469706673582212203057a124216812576a3051efe3bb807c65de1d374da29f2d76d66054fc164e1464736f6c63430008190033", + 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\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedValidationID\",\"type\":\"bytes32\"}],\"name\":\"UnexpectedValidationID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"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\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"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\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"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\":\"NODE_ID_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"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: "0x608060405234801561000f575f80fd5b5060405161390a38038061390a83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6137bd8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610153575f3560e01c8063a3a65e48116100bf578063ce161f1411610079578063ce161f1414610300578063d588c18f14610330578063d5f20ff614610343578063df93d8de14610363578063f2fde38b1461036d578063fd7ac5e714610380575f80fd5b8063a3a65e4814610265578063b771b3bc14610278578063bb0b193814610286578063bc5fbfec146102d1578063bee0a03f146102e5578063c974d1b6146102f8575f80fd5b8063732214f811610110578063732214f8146101c75780638280a25a146101ce5780638da5cb5b146101e85780639681d9401461022c57806397fb70d41461023f5780639ba96b8614610252575f80fd5b80630322ed981461015757806320d91b7a1461016c5780635dc1f5351461017f57806360305d62146101a257806363e2ca97146101a2578063715018a6146101bf575b5f80fd5b61016a61016536600461295e565b610393565b005b61016a61017a36600461298d565b610631565b5f80516020613748833981519152545b6040519081526020015b60405180910390f35b6101aa601481565b60405163ffffffff9091168152602001610199565b61016a610c0a565b61018f5f81565b6101d6603081565b60405160ff9091168152602001610199565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b039091168152602001610199565b61018f61023a3660046129db565b610c1d565b61016a61024d36600461295e565b610c30565b61018f610260366004612a08565b610c44565b61018f6102733660046129db565b610d1a565b6102146005600160991b0181565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0354600160401b90046001600160401b03165b6040516001600160401b039091168152602001610199565b61018f5f8051602061374883398151915281565b61016a6102f336600461295e565b610f0c565b6101d6601481565b61031361030e3660046129db565b61104d565b604080519283526001600160401b03909116602083015201610199565b61016a61033e366004612a6e565b6111dc565b61035661035136600461295e565b6112ea565b6040516101999190612b20565b6102b96202a30081565b61016a61037b366004612bd6565b611444565b61018f61038e366004612bf8565b61147e565b5f8181525f8051602061376883398151915260205260408082208151610100810190925280545f8051602061374883398151915293929190829060ff1660058111156103e1576103e1612a9f565b60058111156103f2576103f2612a9f565b815260200160018201805461040690612c63565b80601f016020809104026020016040519081016040528092919081815260200182805461043290612c63565b801561047d5780601f106104545761010080835404028352916020019161047d565b820191905f5260205f20905b81548152906001019060200180831161046057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156104f5576104f5612a9f565b14610531575f8381526005830160205260409081902054905163170cc93360e21b81526105289160ff1690600401612c9b565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156105a8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105cf9190810190612dac565b6040518263ffffffff1660e01b81526004016105eb9190612ddd565b6020604051808303815f875af1158015610607573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061062b9190612def565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206137488339815191529060ff161561068357604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ea9190612def565b836020013514610713576040516372b0a7e760e11b815260208401356004820152602401610528565b306107246060850160408601612bd6565b6001600160a01b031614610767576107426060840160408501612bd6565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610528565b5f6107756060850185612e06565b905090505f805b828163ffffffff1610156109fb575f6107986060880188612e06565b8363ffffffff168181106107ae576107ae612e4b565b90506020028101906107c09190612e5f565b6107c990612eca565b80516040519192505f9160068801916107e191612f45565b9081526020016040518091039020541461081157805160405163a41f772f60e01b81526105289190600401612ddd565b805151601414610837578051604051633e08a12560e11b81526105289190600401612ddd565b5f6002885f01358460405160200161086692919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261088091612f45565b602060405180830381855afa15801561089b573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906108be9190612def565b90508086600601835f01516040516108d69190612f45565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906109169082612fa1565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b0319909316929092179091556109859085613074565b8251602001519094506bffffffffffffffffffffffff1916817f9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d784604001516040516109e091906001600160401b0391909116815260200190565b60405180910390a35050806109f490613094565b905061077c565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b0384168102919091179091556001840154606491610a43910460ff16836130b6565b6001600160401b03161015610a7657604051633e1a785160e01b81526001600160401b0382166004820152602401610528565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610a9a876114d9565b604001516040518263ffffffff1660e01b8152600401610aba9190612ddd565b602060405180830381865af4158015610ad5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610af99190612def565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610b33919061320c565b5f60405180830381865af4158015610b4d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b749190810190612dac565b90505f600282604051610b879190612f45565b602060405180830381855afa158015610ba2573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610bc59190612def565b9050828114610bf15760405163baaea89d60e01b81526004810182905260248101849052604401610528565b5050506007909201805460ff1916600117905550505050565b610c126115ef565b610c1b5f61164a565b565b5f80610c28836116ba565b509392505050565b610c386115ef565b610c4181611a72565b50565b5f610c4d6115ef565b610d11610c5a84806132a0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c9b9250505060208601866132a0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610cdf9250505060608701604088016132e2565b610cec60608801886132fd565b610cf590613311565b610d0260808901896132fd565b610d0b90613311565b87611d68565b90505b92915050565b5f5f80516020613748833981519152818073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610d4e876114d9565b604001516040518263ffffffff1660e01b8152600401610d6e9190612ddd565b6040805180830381865af4158015610d88573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dac91906133e7565b9150915080610dd257604051632d07135360e01b81528115156004820152602401610528565b5f82815260048401602052604090208054610dec90612c63565b90505f03610e105760405163089938b360e11b815260048101839052602401610528565b60015f838152600580860160205260409091205460ff1690811115610e3757610e37612a9f565b14610e6a575f8281526005840160205260409081902054905163170cc93360e21b81526105289160ff1690600401612c9b565b5f8281526004840160205260408120610e82916128ca565b5f828152600584016020908152604091829020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff19909216919091179091559101549251600160c01b90930416825283917f967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06910160405180910390a2509392505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206137488339815191529190610f5390612c63565b90505f03610f775760405163089938b360e11b815260048101839052602401610528565b60015f838152600580840160205260409091205460ff1690811115610f9e57610f9e612a9f565b14610fd1575f8281526005820160205260409081902054905163170cc93360e21b81526105289160ff1690600401612c9b565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb926110089201613408565b6020604051808303815f875af1158015611024573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110489190612def565b505050565b5f805f611059846114d9565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b81526004016110999190612ddd565b606060405180830381865af41580156110b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110d89190613492565b9250925092505f6110f35f8051602061374883398151915290565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b90920416101561114757604051632e19bc2d60e11b81526001600160401b0384166004820152602401610528565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9906111c790869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156112205750825b90505f826001600160401b0316600114801561123b5750303b155b905081158015611249575080155b156112675760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561129157845460ff60401b1916600160401b1785555b61129b878761216c565b83156112e157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6112f2612901565b5f8281525f805160206137688339815191526020526040908190208151610100810190925280545f80516020613748833981519152929190829060ff16600581111561134057611340612a9f565b600581111561135157611351612a9f565b815260200160018201805461136590612c63565b80601f016020809104026020016040519081016040528092919081815260200182805461139190612c63565b80156113dc5780601f106113b3576101008083540402835291602001916113dc565b820191905f5260205f20905b8154815290600101906020018083116113bf57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b61144c6115ef565b6001600160a01b03811661147557604051631e4fbdf760e01b81525f6004820152602401610528565b610c418161164a565b6040515f905f80516020613748833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06906114c190869086906134d2565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561153d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261156491908101906134e1565b915091508061158657604051636b2f19e960e01b815260040160405180910390fd5b8151156115ac578151604051636ba589a560e01b81526004810191909152602401610528565b60208201516001600160a01b0316156115e8576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610528565b5092915050565b336116217f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610c1b5760405163118cdaa760e01b8152336004820152602401610528565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f6116c3612901565b5f805160206137488339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6116f6886114d9565b604001516040518263ffffffff1660e01b81526004016117169190612ddd565b6040805180830381865af4158015611730573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061175491906133e7565b91509150801561177b57604051632d07135360e01b81528115156004820152602401610528565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff909116908111156117b3576117b3612a9f565b60058111156117c4576117c4612a9f565b81526020016001820180546117d890612c63565b80601f016020809104026020016040519081016040528092919081815260200182805461180490612c63565b801561184f5780601f106118265761010080835404028352916020019161184f565b820191905f5260205f20905b81548152906001019060200180831161183257829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156118c7576118c7612a9f565b141580156118e857506001815160058111156118e5576118e5612a9f565b14155b1561190957805160405163170cc93360e21b81526105289190600401612c9b565b60038151600581111561191e5761191e612a9f565b0361192c5760048152611931565b600581525b8360060181602001516040516119479190612f45565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561198a5761198a612a9f565b0217905550602082015160018201906119a39082612fa1565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f8181525f8051602061376883398151915260205260408082208151610100810190925280545f8051602061374883398151915293929190829060ff166005811115611ac057611ac0612a9f565b6005811115611ad157611ad1612a9f565b8152602001600182018054611ae590612c63565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1190612c63565b8015611b5c5780601f10611b3357610100808354040283529160200191611b5c565b820191905f5260205f20905b815481529060010190602001808311611b3f57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115611bd457611bd4612a9f565b14611c07575f8381526005830160205260409081902054905163170cc93360e21b81526105289160ff1690600401612c9b565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115611c4c57611c4c612a9f565b021790555060208201516001820190611c659082612fa1565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f611d05848261218a565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051611d5a939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16611dac57604051637fab81e560e01b815260040160405180910390fd5b5f80516020613748833981519152426001600160401b038716111580611de75750611dda6202a3004261356e565b866001600160401b031610155b15611e1057604051635879da1360e11b81526001600160401b0387166004820152602401610528565b60038101546001600160401b0390611e3390600160401b9004821685831661356e565b1115611e5d57604051633e1a785160e01b81526001600160401b0384166004820152602401610528565b611e6685612361565b611e6f84612361565b8651603014611e965786516040516326475b2f60e11b815260040161052891815260200190565b8751601414611eba5787604051633e08a12560e11b81526004016105289190612ddd565b5f801b8160060189604051611ecf9190612f45565b90815260200160405180910390205414611efe578760405163a41f772f60e01b81526004016105289190612ddd565b611f08835f612480565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611f8891906135e7565b5f60405180830381865af4158015611fa2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611fc99190810190613696565b5f82815260048601602052604090209193509150611fe78282612fa1565b5081836006018b604051611ffb9190612f45565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90612037908590600401612ddd565b6020604051808303815f875af1158015612053573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120779190612def565b5f8481526005860160205260409020805460ff191660019081178255919250016120a18c82612fa1565b505f8381526005850160205260409020600281018054600160c01b6001600160401b038a1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690556120f88b6020015190565b6bffffffffffffffffffffffff1916837f5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d838c8a604051612155939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a350909998505050505050505050565b6121746126ea565b61217d82612733565b6121868161274c565b5050565b5f8281525f80516020613768833981519152602052604081206002015481905f8051602061374883398151915290600160c01b90046001600160401b03166121d28582612480565b5f6121dc8761275d565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015612280573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122a79190810190612dac565b6040518263ffffffff1660e01b81526004016122c39190612ddd565b6020604051808303815f875af11580156122df573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123039190612def565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b805163ffffffff1615801561237a575060208101515115155b156123ae57805160208201515160405163c08a0f1d60e01b815263ffffffff90921660048301526024820152604401610528565b602081015151815163ffffffff1611156123f157805160208201515160405163c08a0f1d60e01b815263ffffffff90921660048301526024820152604401610528565b60015b8160200151518110156121865760208201516124116001836136d9565b8151811061242157612421612e4b565b60200260200101516001600160a01b03168260200151828151811061244857612448612e4b565b60200260200101516001600160a01b0316101561247857604051630dbc8d5f60e31b815260040160405180910390fd5b6001016123f4565b5f805160206137488339815191525f6001600160401b0380841690851611156124b4576124ad83856136ec565b90506124c1565b6124be84846136ec565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b900490921660608201524291158061252e57506001840154815161252a916001600160401b03169061356e565b8210155b15612556576001600160401b0380841660608301528282526040820151166020820152612575565b82816060018181516125689190613074565b6001600160401b03169052505b60608101516125859060646130b6565b602082015160018601546001600160401b0392909216916125b09190600160401b900460ff166130b6565b6001600160401b031610156125e957606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610528565b85816040018181516125fb9190613074565b6001600160401b031690525060408101805186919061261b9083906136ec565b6001600160401b03169052506001840154604082015160649161264991600160401b90910460ff16906130b6565b6001600160401b03161015612682576040808201519051633e1a785160e01b81526001600160401b039091166004820152602401610528565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610c1b57604051631afcd79f60e31b815260040160405180910390fd5b61273b6126ea565b6127436127d2565b610c41816127da565b6127546126ea565b610c41816128c2565b5f8181525f805160206137688339815191526020526040812060020180545f8051602061374883398151915291906008906127a790600160401b90046001600160401b031661370c565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610c1b6126ea565b6127e26126ea565b80355f8051602061374883398151915290815560146128076060840160408501613727565b60ff16118061282657506128216060830160408401613727565b60ff16155b1561285a5761283b6060830160408401613727565b604051634a59bbff60e11b815260ff9091166004820152602401610528565b61286a6060830160408401613727565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561289b60408301602084016132e2565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b61144c6126ea565b5080546128d690612c63565b5f825580601f106128e5575050565b601f0160209004905f5260205f2090810190610c419190612946565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b8082111561295a575f8155600101612947565b5090565b5f6020828403121561296e575f80fd5b5035919050565b803563ffffffff81168114612988575f80fd5b919050565b5f806040838503121561299e575f80fd5b82356001600160401b038111156129b3575f80fd5b8301608081860312156129c4575f80fd5b91506129d260208401612975565b90509250929050565b5f602082840312156129eb575f80fd5b610d1182612975565b6001600160401b0381168114610c41575f80fd5b5f8060408385031215612a19575f80fd5b82356001600160401b03811115612a2e575f80fd5b830160a08186031215612a3f575f80fd5b91506020830135612a4f816129f4565b809150509250929050565b6001600160a01b0381168114610c41575f80fd5b5f808284036080811215612a80575f80fd5b6060811215612a8d575f80fd5b508291506060830135612a4f81612a5a565b634e487b7160e01b5f52602160045260245ffd5b60068110612acf57634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612aed578181015183820152602001612ad5565b50505f910152565b5f8151808452612b0c816020860160208601612ad3565b601f01601f19169290920160200192915050565b60208152612b32602082018351612ab3565b5f6020830151610100806040850152612b4f610120850183612af5565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151612b8e60a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f60208284031215612be6575f80fd5b8135612bf181612a5a565b9392505050565b5f8060208385031215612c09575f80fd5b82356001600160401b0380821115612c1f575f80fd5b818501915085601f830112612c32575f80fd5b813581811115612c40575f80fd5b866020828501011115612c51575f80fd5b60209290920196919550909350505050565b600181811c90821680612c7757607f821691505b602082108103612c9557634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610d148284612ab3565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612cdf57612cdf612ca9565b60405290565b604080519081016001600160401b0381118282101715612cdf57612cdf612ca9565b604051601f8201601f191681016001600160401b0381118282101715612d2f57612d2f612ca9565b604052919050565b5f6001600160401b03821115612d4f57612d4f612ca9565b50601f01601f191660200190565b5f82601f830112612d6c575f80fd5b8151612d7f612d7a82612d37565b612d07565b818152846020838601011115612d93575f80fd5b612da4826020830160208701612ad3565b949350505050565b5f60208284031215612dbc575f80fd5b81516001600160401b03811115612dd1575f80fd5b612da484828501612d5d565b602081525f610d116020830184612af5565b5f60208284031215612dff575f80fd5b5051919050565b5f808335601e19843603018112612e1b575f80fd5b8301803591506001600160401b03821115612e34575f80fd5b6020019150600581901b360382131561235a575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612e73575f80fd5b9190910192915050565b5f82601f830112612e8c575f80fd5b8135612e9a612d7a82612d37565b818152846020838601011115612eae575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612eda575f80fd5b612ee2612cbd565b82356001600160401b0380821115612ef8575f80fd5b612f0436838701612e7d565b83526020850135915080821115612f19575f80fd5b50612f2636828601612e7d565b6020830152506040830135612f3a816129f4565b604082015292915050565b5f8251612e73818460208701612ad3565b601f82111561104857805f5260205f20601f840160051c81016020851015612f7b5750805b601f840160051c820191505b81811015612f9a575f8155600101612f87565b5050505050565b81516001600160401b03811115612fba57612fba612ca9565b612fce81612fc88454612c63565b84612f56565b602080601f831160018114613001575f8415612fea5750858301515b5f19600386901b1c1916600185901b178555613058565b5f85815260208120601f198616915b8281101561302f57888601518255948401946001909101908401613010565b508582101561304c57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156115e8576115e8613060565b5f63ffffffff8083168181036130ac576130ac613060565b6001019392505050565b6001600160401b038181168382160280821691908281146130d9576130d9613060565b505092915050565b5f808335601e198436030181126130f6575f80fd5b83016020810192503590506001600160401b03811115613114575f80fd5b80360382131561235a575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156131ff57848303601f19018952813536889003605e19018112613186575f80fd5b8701606061319482806130e1565b8287526131a48388018284613122565b925050506131b4868301836130e1565b868303888801526131c6838284613122565b9250505060408083013592506131db836129f4565b6001600160401b039290921694909101939093529783019790830190600101613161565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561323081612a5a565b6001600160a01b031660608381019190915283013536849003601e19018112613257575f80fd5b83016020810190356001600160401b03811115613272575f80fd5b8060051b3603821315613283575f80fd5b60808085015261329760a08501828461314a565b95945050505050565b5f808335601e198436030181126132b5575f80fd5b8301803591506001600160401b038211156132ce575f80fd5b60200191503681900382131561235a575f80fd5b5f602082840312156132f2575f80fd5b8135612bf1816129f4565b5f8235603e19833603018112612e73575f80fd5b5f60408236031215613321575f80fd5b613329612ce5565b61333283612975565b81526020808401356001600160401b038082111561334e575f80fd5b9085019036601f830112613360575f80fd5b81358181111561337257613372612ca9565b8060051b9150613383848301612d07565b818152918301840191848101903684111561339c575f80fd5b938501935b838510156133c657843592506133b683612a5a565b82825293850193908501906133a1565b94860194909452509295945050505050565b80518015158114612988575f80fd5b5f80604083850312156133f8575f80fd5b825191506129d2602084016133d8565b5f60208083525f845461341a81612c63565b806020870152604060018084165f811461343b576001811461345757613484565b60ff19851660408a0152604084151560051b8a01019550613484565b895f5260205f205f5b8581101561347b5781548b8201860152908301908801613460565b8a016040019650505b509398975050505050505050565b5f805f606084860312156134a4575f80fd5b8351925060208401516134b6816129f4565b60408501519092506134c7816129f4565b809150509250925092565b818382375f9101908152919050565b5f80604083850312156134f2575f80fd5b82516001600160401b0380821115613508575f80fd5b908401906060828703121561351b575f80fd5b613523612cbd565b82518152602083015161353581612a5a565b602082015260408301518281111561354b575f80fd5b61355788828601612d5d565b60408301525093506129d2915050602084016133d8565b80820180821115610d1457610d14613060565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156135dc5784516001600160a01b031682529383019360019290920191908301906135b3565b509695505050505050565b60208152815160208201525f602083015160e0604084015261360d610100840182612af5565b90506040840151601f198085840301606086015261362b8383612af5565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261365b8383613581565b925060a08601519150808584030160c0860152506136798282613581565b91505060c0840151610c2860e08501826001600160401b03169052565b5f80604083850312156136a7575f80fd5b8251915060208301516001600160401b038111156136c3575f80fd5b6136cf85828601612d5d565b9150509250929050565b81810381811115610d1457610d14613060565b6001600160401b038281168282160390808211156115e8576115e8613060565b5f6001600160401b038083168181036130ac576130ac613060565b5f60208284031215613737575f80fd5b813560ff81168114612bf1575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a26469706673582212200bb95de6882243142371e06f61dc2c6b18a57b2e92eda6a30dd3387496955e8b64736f6c63430008190033", } // PoAValidatorManagerABI is the input ABI used to generate the binding from. @@ -388,6 +389,37 @@ func (_PoAValidatorManager *PoAValidatorManagerCallerSession) MAXIMUMREGISTRATIO return _PoAValidatorManager.Contract.MAXIMUMREGISTRATIONEXPIRYLENGTH(&_PoAValidatorManager.CallOpts) } +// NODEIDLENGTH is a free data retrieval call binding the contract method 0x63e2ca97. +// +// Solidity: function NODE_ID_LENGTH() view returns(uint32) +func (_PoAValidatorManager *PoAValidatorManagerCaller) NODEIDLENGTH(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _PoAValidatorManager.contract.Call(opts, &out, "NODE_ID_LENGTH") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// NODEIDLENGTH is a free data retrieval call binding the contract method 0x63e2ca97. +// +// Solidity: function NODE_ID_LENGTH() view returns(uint32) +func (_PoAValidatorManager *PoAValidatorManagerSession) NODEIDLENGTH() (uint32, error) { + return _PoAValidatorManager.Contract.NODEIDLENGTH(&_PoAValidatorManager.CallOpts) +} + +// NODEIDLENGTH is a free data retrieval call binding the contract method 0x63e2ca97. +// +// Solidity: function NODE_ID_LENGTH() view returns(uint32) +func (_PoAValidatorManager *PoAValidatorManagerCallerSession) NODEIDLENGTH() (uint32, error) { + return _PoAValidatorManager.Contract.NODEIDLENGTH(&_PoAValidatorManager.CallOpts) +} + // PCHAINBLOCKCHAINID is a free data retrieval call binding the contract method 0x732214f8. // // Solidity: function P_CHAIN_BLOCKCHAIN_ID() view returns(bytes32) @@ -483,7 +515,7 @@ func (_PoAValidatorManager *PoAValidatorManagerCallerSession) WARPMESSENGER() (c // GetValidator is a free data retrieval call binding the contract method 0xd5f20ff6. // -// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64)) +// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64,uint64)) func (_PoAValidatorManager *PoAValidatorManagerCaller) GetValidator(opts *bind.CallOpts, validationID [32]byte) (Validator, error) { var out []interface{} err := _PoAValidatorManager.contract.Call(opts, &out, "getValidator", validationID) @@ -500,18 +532,49 @@ func (_PoAValidatorManager *PoAValidatorManagerCaller) GetValidator(opts *bind.C // GetValidator is a free data retrieval call binding the contract method 0xd5f20ff6. // -// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64)) +// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64,uint64)) func (_PoAValidatorManager *PoAValidatorManagerSession) GetValidator(validationID [32]byte) (Validator, error) { return _PoAValidatorManager.Contract.GetValidator(&_PoAValidatorManager.CallOpts, validationID) } // GetValidator is a free data retrieval call binding the contract method 0xd5f20ff6. // -// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64)) +// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64,uint64)) func (_PoAValidatorManager *PoAValidatorManagerCallerSession) GetValidator(validationID [32]byte) (Validator, error) { return _PoAValidatorManager.Contract.GetValidator(&_PoAValidatorManager.CallOpts, validationID) } +// L1TotalWeight is a free data retrieval call binding the contract method 0xbb0b1938. +// +// Solidity: function l1TotalWeight() view returns(uint64) +func (_PoAValidatorManager *PoAValidatorManagerCaller) L1TotalWeight(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _PoAValidatorManager.contract.Call(opts, &out, "l1TotalWeight") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// L1TotalWeight is a free data retrieval call binding the contract method 0xbb0b1938. +// +// Solidity: function l1TotalWeight() view returns(uint64) +func (_PoAValidatorManager *PoAValidatorManagerSession) L1TotalWeight() (uint64, error) { + return _PoAValidatorManager.Contract.L1TotalWeight(&_PoAValidatorManager.CallOpts) +} + +// L1TotalWeight is a free data retrieval call binding the contract method 0xbb0b1938. +// +// Solidity: function l1TotalWeight() view returns(uint64) +func (_PoAValidatorManager *PoAValidatorManagerCallerSession) L1TotalWeight() (uint64, error) { + return _PoAValidatorManager.Contract.L1TotalWeight(&_PoAValidatorManager.CallOpts) +} + // Owner is a free data retrieval call binding the contract method 0x8da5cb5b. // // Solidity: function owner() view returns(address) @@ -574,48 +637,100 @@ func (_PoAValidatorManager *PoAValidatorManagerCallerSession) RegisteredValidato return _PoAValidatorManager.Contract.RegisteredValidators(&_PoAValidatorManager.CallOpts, nodeID) } -// CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. +// SubnetID is a free data retrieval call binding the contract method 0x5dc1f535. // -// Solidity: function completeEndValidation(uint32 messageIndex) returns() -func (_PoAValidatorManager *PoAValidatorManagerTransactor) CompleteEndValidation(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { - return _PoAValidatorManager.contract.Transact(opts, "completeEndValidation", messageIndex) +// Solidity: function subnetID() view returns(bytes32) +func (_PoAValidatorManager *PoAValidatorManagerCaller) SubnetID(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _PoAValidatorManager.contract.Call(opts, &out, "subnetID") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + } -// CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. +// SubnetID is a free data retrieval call binding the contract method 0x5dc1f535. // -// Solidity: function completeEndValidation(uint32 messageIndex) returns() -func (_PoAValidatorManager *PoAValidatorManagerSession) CompleteEndValidation(messageIndex uint32) (*types.Transaction, error) { - return _PoAValidatorManager.Contract.CompleteEndValidation(&_PoAValidatorManager.TransactOpts, messageIndex) +// Solidity: function subnetID() view returns(bytes32) +func (_PoAValidatorManager *PoAValidatorManagerSession) SubnetID() ([32]byte, error) { + return _PoAValidatorManager.Contract.SubnetID(&_PoAValidatorManager.CallOpts) } -// CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. +// SubnetID is a free data retrieval call binding the contract method 0x5dc1f535. // -// Solidity: function completeEndValidation(uint32 messageIndex) returns() -func (_PoAValidatorManager *PoAValidatorManagerTransactorSession) CompleteEndValidation(messageIndex uint32) (*types.Transaction, error) { - return _PoAValidatorManager.Contract.CompleteEndValidation(&_PoAValidatorManager.TransactOpts, messageIndex) +// Solidity: function subnetID() view returns(bytes32) +func (_PoAValidatorManager *PoAValidatorManagerCallerSession) SubnetID() ([32]byte, error) { + return _PoAValidatorManager.Contract.SubnetID(&_PoAValidatorManager.CallOpts) } // CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. // -// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns() +// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns(bytes32) func (_PoAValidatorManager *PoAValidatorManagerTransactor) CompleteValidatorRegistration(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { return _PoAValidatorManager.contract.Transact(opts, "completeValidatorRegistration", messageIndex) } // CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. // -// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns() +// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns(bytes32) func (_PoAValidatorManager *PoAValidatorManagerSession) CompleteValidatorRegistration(messageIndex uint32) (*types.Transaction, error) { return _PoAValidatorManager.Contract.CompleteValidatorRegistration(&_PoAValidatorManager.TransactOpts, messageIndex) } // CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. // -// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns() +// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns(bytes32) func (_PoAValidatorManager *PoAValidatorManagerTransactorSession) CompleteValidatorRegistration(messageIndex uint32) (*types.Transaction, error) { return _PoAValidatorManager.Contract.CompleteValidatorRegistration(&_PoAValidatorManager.TransactOpts, messageIndex) } +// CompleteValidatorRemoval is a paid mutator transaction binding the contract method 0x9681d940. +// +// Solidity: function completeValidatorRemoval(uint32 messageIndex) returns(bytes32) +func (_PoAValidatorManager *PoAValidatorManagerTransactor) CompleteValidatorRemoval(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { + return _PoAValidatorManager.contract.Transact(opts, "completeValidatorRemoval", messageIndex) +} + +// CompleteValidatorRemoval is a paid mutator transaction binding the contract method 0x9681d940. +// +// Solidity: function completeValidatorRemoval(uint32 messageIndex) returns(bytes32) +func (_PoAValidatorManager *PoAValidatorManagerSession) CompleteValidatorRemoval(messageIndex uint32) (*types.Transaction, error) { + return _PoAValidatorManager.Contract.CompleteValidatorRemoval(&_PoAValidatorManager.TransactOpts, messageIndex) +} + +// CompleteValidatorRemoval is a paid mutator transaction binding the contract method 0x9681d940. +// +// Solidity: function completeValidatorRemoval(uint32 messageIndex) returns(bytes32) +func (_PoAValidatorManager *PoAValidatorManagerTransactorSession) CompleteValidatorRemoval(messageIndex uint32) (*types.Transaction, error) { + return _PoAValidatorManager.Contract.CompleteValidatorRemoval(&_PoAValidatorManager.TransactOpts, messageIndex) +} + +// CompleteValidatorWeightUpdate is a paid mutator transaction binding the contract method 0xce161f14. +// +// Solidity: function completeValidatorWeightUpdate(uint32 messageIndex) returns(bytes32, uint64) +func (_PoAValidatorManager *PoAValidatorManagerTransactor) CompleteValidatorWeightUpdate(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { + return _PoAValidatorManager.contract.Transact(opts, "completeValidatorWeightUpdate", messageIndex) +} + +// CompleteValidatorWeightUpdate is a paid mutator transaction binding the contract method 0xce161f14. +// +// Solidity: function completeValidatorWeightUpdate(uint32 messageIndex) returns(bytes32, uint64) +func (_PoAValidatorManager *PoAValidatorManagerSession) CompleteValidatorWeightUpdate(messageIndex uint32) (*types.Transaction, error) { + return _PoAValidatorManager.Contract.CompleteValidatorWeightUpdate(&_PoAValidatorManager.TransactOpts, messageIndex) +} + +// CompleteValidatorWeightUpdate is a paid mutator transaction binding the contract method 0xce161f14. +// +// Solidity: function completeValidatorWeightUpdate(uint32 messageIndex) returns(bytes32, uint64) +func (_PoAValidatorManager *PoAValidatorManagerTransactorSession) CompleteValidatorWeightUpdate(messageIndex uint32) (*types.Transaction, error) { + return _PoAValidatorManager.Contract.CompleteValidatorWeightUpdate(&_PoAValidatorManager.TransactOpts, messageIndex) +} + // Initialize is a paid mutator transaction binding the contract method 0xd588c18f. // // Solidity: function initialize((bytes32,uint64,uint8) settings, address initialOwner) returns() @@ -784,9 +899,9 @@ func (_PoAValidatorManager *PoAValidatorManagerTransactorSession) TransferOwners return _PoAValidatorManager.Contract.TransferOwnership(&_PoAValidatorManager.TransactOpts, newOwner) } -// PoAValidatorManagerInitialValidatorCreatedIterator is returned from FilterInitialValidatorCreated and is used to iterate over the raw logs and unpacked data for InitialValidatorCreated events raised by the PoAValidatorManager contract. -type PoAValidatorManagerInitialValidatorCreatedIterator struct { - Event *PoAValidatorManagerInitialValidatorCreated // Event containing the contract specifics and raw log +// PoAValidatorManagerCompletedValidatorRegistrationIterator is returned from FilterCompletedValidatorRegistration and is used to iterate over the raw logs and unpacked data for CompletedValidatorRegistration events raised by the PoAValidatorManager contract. +type PoAValidatorManagerCompletedValidatorRegistrationIterator struct { + Event *PoAValidatorManagerCompletedValidatorRegistration // 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 @@ -800,7 +915,7 @@ type PoAValidatorManagerInitialValidatorCreatedIterator 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 *PoAValidatorManagerInitialValidatorCreatedIterator) Next() bool { +func (it *PoAValidatorManagerCompletedValidatorRegistrationIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -809,7 +924,7 @@ func (it *PoAValidatorManagerInitialValidatorCreatedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerInitialValidatorCreated) + it.Event = new(PoAValidatorManagerCompletedValidatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -824,7 +939,7 @@ func (it *PoAValidatorManagerInitialValidatorCreatedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerInitialValidatorCreated) + it.Event = new(PoAValidatorManagerCompletedValidatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -840,53 +955,52 @@ func (it *PoAValidatorManagerInitialValidatorCreatedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *PoAValidatorManagerInitialValidatorCreatedIterator) Error() error { +func (it *PoAValidatorManagerCompletedValidatorRegistrationIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *PoAValidatorManagerInitialValidatorCreatedIterator) Close() error { +func (it *PoAValidatorManagerCompletedValidatorRegistrationIterator) Close() error { it.sub.Unsubscribe() return nil } -// PoAValidatorManagerInitialValidatorCreated represents a InitialValidatorCreated event raised by the PoAValidatorManager contract. -type PoAValidatorManagerInitialValidatorCreated struct { +// PoAValidatorManagerCompletedValidatorRegistration represents a CompletedValidatorRegistration event raised by the PoAValidatorManager contract. +type PoAValidatorManagerCompletedValidatorRegistration struct { ValidationID [32]byte Weight uint64 - NodeID []byte Raw types.Log // Blockchain specific contextual infos } -// FilterInitialValidatorCreated is a free log retrieval operation binding the contract event 0xd80a750132c7a4fb67e226bdfecab0d8609bbb4e48cdad62cee218f25b758fff. +// FilterCompletedValidatorRegistration is a free log retrieval operation binding the contract event 0x967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06. // -// Solidity: event InitialValidatorCreated(bytes32 indexed validationID, uint64 weight, bytes nodeID) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterInitialValidatorCreated(opts *bind.FilterOpts, validationID [][32]byte) (*PoAValidatorManagerInitialValidatorCreatedIterator, error) { +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterCompletedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte) (*PoAValidatorManagerCompletedValidatorRegistrationIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "InitialValidatorCreated", validationIDRule) + logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "CompletedValidatorRegistration", validationIDRule) if err != nil { return nil, err } - return &PoAValidatorManagerInitialValidatorCreatedIterator{contract: _PoAValidatorManager.contract, event: "InitialValidatorCreated", logs: logs, sub: sub}, nil + return &PoAValidatorManagerCompletedValidatorRegistrationIterator{contract: _PoAValidatorManager.contract, event: "CompletedValidatorRegistration", logs: logs, sub: sub}, nil } -// WatchInitialValidatorCreated is a free log subscription operation binding the contract event 0xd80a750132c7a4fb67e226bdfecab0d8609bbb4e48cdad62cee218f25b758fff. +// WatchCompletedValidatorRegistration is a free log subscription operation binding the contract event 0x967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06. // -// Solidity: event InitialValidatorCreated(bytes32 indexed validationID, uint64 weight, bytes nodeID) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchInitialValidatorCreated(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerInitialValidatorCreated, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchCompletedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerCompletedValidatorRegistration, validationID [][32]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "InitialValidatorCreated", validationIDRule) + logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "CompletedValidatorRegistration", validationIDRule) if err != nil { return nil, err } @@ -896,8 +1010,8 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchInitialValidatorCr select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(PoAValidatorManagerInitialValidatorCreated) - if err := _PoAValidatorManager.contract.UnpackLog(event, "InitialValidatorCreated", log); err != nil { + event := new(PoAValidatorManagerCompletedValidatorRegistration) + if err := _PoAValidatorManager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { return err } event.Raw = log @@ -918,21 +1032,21 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchInitialValidatorCr }), nil } -// ParseInitialValidatorCreated is a log parse operation binding the contract event 0xd80a750132c7a4fb67e226bdfecab0d8609bbb4e48cdad62cee218f25b758fff. +// ParseCompletedValidatorRegistration is a log parse operation binding the contract event 0x967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06. // -// Solidity: event InitialValidatorCreated(bytes32 indexed validationID, uint64 weight, bytes nodeID) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseInitialValidatorCreated(log types.Log) (*PoAValidatorManagerInitialValidatorCreated, error) { - event := new(PoAValidatorManagerInitialValidatorCreated) - if err := _PoAValidatorManager.contract.UnpackLog(event, "InitialValidatorCreated", log); err != nil { +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseCompletedValidatorRegistration(log types.Log) (*PoAValidatorManagerCompletedValidatorRegistration, error) { + event := new(PoAValidatorManagerCompletedValidatorRegistration) + if err := _PoAValidatorManager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { return nil, err } event.Raw = log return event, nil } -// PoAValidatorManagerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the PoAValidatorManager contract. -type PoAValidatorManagerInitializedIterator struct { - Event *PoAValidatorManagerInitialized // Event containing the contract specifics and raw log +// PoAValidatorManagerCompletedValidatorRemovalIterator is returned from FilterCompletedValidatorRemoval and is used to iterate over the raw logs and unpacked data for CompletedValidatorRemoval events raised by the PoAValidatorManager contract. +type PoAValidatorManagerCompletedValidatorRemovalIterator struct { + Event *PoAValidatorManagerCompletedValidatorRemoval // 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 @@ -946,7 +1060,7 @@ type PoAValidatorManagerInitializedIterator 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 *PoAValidatorManagerInitializedIterator) Next() bool { +func (it *PoAValidatorManagerCompletedValidatorRemovalIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -955,7 +1069,7 @@ func (it *PoAValidatorManagerInitializedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerInitialized) + it.Event = new(PoAValidatorManagerCompletedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -970,7 +1084,7 @@ func (it *PoAValidatorManagerInitializedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerInitialized) + it.Event = new(PoAValidatorManagerCompletedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -986,41 +1100,51 @@ func (it *PoAValidatorManagerInitializedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *PoAValidatorManagerInitializedIterator) Error() error { +func (it *PoAValidatorManagerCompletedValidatorRemovalIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *PoAValidatorManagerInitializedIterator) Close() error { +func (it *PoAValidatorManagerCompletedValidatorRemovalIterator) Close() error { it.sub.Unsubscribe() return nil } -// PoAValidatorManagerInitialized represents a Initialized event raised by the PoAValidatorManager contract. -type PoAValidatorManagerInitialized struct { - Version uint64 - Raw types.Log // Blockchain specific contextual infos +// PoAValidatorManagerCompletedValidatorRemoval represents a CompletedValidatorRemoval event raised by the PoAValidatorManager contract. +type PoAValidatorManagerCompletedValidatorRemoval struct { + ValidationID [32]byte + Raw types.Log // Blockchain specific contextual infos } -// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// FilterCompletedValidatorRemoval is a free log retrieval operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. // -// Solidity: event Initialized(uint64 version) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterInitialized(opts *bind.FilterOpts) (*PoAValidatorManagerInitializedIterator, error) { +// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterCompletedValidatorRemoval(opts *bind.FilterOpts, validationID [][32]byte) (*PoAValidatorManagerCompletedValidatorRemovalIterator, error) { - logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "Initialized") + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "CompletedValidatorRemoval", validationIDRule) if err != nil { return nil, err } - return &PoAValidatorManagerInitializedIterator{contract: _PoAValidatorManager.contract, event: "Initialized", logs: logs, sub: sub}, nil + return &PoAValidatorManagerCompletedValidatorRemovalIterator{contract: _PoAValidatorManager.contract, event: "CompletedValidatorRemoval", logs: logs, sub: sub}, nil } -// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// WatchCompletedValidatorRemoval is a free log subscription operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. // -// Solidity: event Initialized(uint64 version) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerInitialized) (event.Subscription, error) { +// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchCompletedValidatorRemoval(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerCompletedValidatorRemoval, validationID [][32]byte) (event.Subscription, error) { - logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "Initialized") + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "CompletedValidatorRemoval", validationIDRule) if err != nil { return nil, err } @@ -1030,8 +1154,8 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchInitialized(opts * select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(PoAValidatorManagerInitialized) - if err := _PoAValidatorManager.contract.UnpackLog(event, "Initialized", log); err != nil { + event := new(PoAValidatorManagerCompletedValidatorRemoval) + if err := _PoAValidatorManager.contract.UnpackLog(event, "CompletedValidatorRemoval", log); err != nil { return err } event.Raw = log @@ -1052,21 +1176,21 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchInitialized(opts * }), nil } -// ParseInitialized is a log parse operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// ParseCompletedValidatorRemoval is a log parse operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. // -// Solidity: event Initialized(uint64 version) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseInitialized(log types.Log) (*PoAValidatorManagerInitialized, error) { - event := new(PoAValidatorManagerInitialized) - if err := _PoAValidatorManager.contract.UnpackLog(event, "Initialized", log); err != nil { +// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseCompletedValidatorRemoval(log types.Log) (*PoAValidatorManagerCompletedValidatorRemoval, error) { + event := new(PoAValidatorManagerCompletedValidatorRemoval) + if err := _PoAValidatorManager.contract.UnpackLog(event, "CompletedValidatorRemoval", log); err != nil { return nil, err } event.Raw = log return event, nil } -// PoAValidatorManagerOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the PoAValidatorManager contract. -type PoAValidatorManagerOwnershipTransferredIterator struct { - Event *PoAValidatorManagerOwnershipTransferred // Event containing the contract specifics and raw log +// PoAValidatorManagerCompletedValidatorWeightUpdateIterator is returned from FilterCompletedValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for CompletedValidatorWeightUpdate events raised by the PoAValidatorManager contract. +type PoAValidatorManagerCompletedValidatorWeightUpdateIterator struct { + Event *PoAValidatorManagerCompletedValidatorWeightUpdate // 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 @@ -1080,7 +1204,7 @@ type PoAValidatorManagerOwnershipTransferredIterator 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 *PoAValidatorManagerOwnershipTransferredIterator) Next() bool { +func (it *PoAValidatorManagerCompletedValidatorWeightUpdateIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1089,7 +1213,7 @@ func (it *PoAValidatorManagerOwnershipTransferredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerOwnershipTransferred) + it.Event = new(PoAValidatorManagerCompletedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1104,7 +1228,7 @@ func (it *PoAValidatorManagerOwnershipTransferredIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerOwnershipTransferred) + it.Event = new(PoAValidatorManagerCompletedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1120,60 +1244,187 @@ func (it *PoAValidatorManagerOwnershipTransferredIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *PoAValidatorManagerOwnershipTransferredIterator) Error() error { +func (it *PoAValidatorManagerCompletedValidatorWeightUpdateIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *PoAValidatorManagerOwnershipTransferredIterator) Close() error { +func (it *PoAValidatorManagerCompletedValidatorWeightUpdateIterator) Close() error { it.sub.Unsubscribe() return nil } -// PoAValidatorManagerOwnershipTransferred represents a OwnershipTransferred event raised by the PoAValidatorManager contract. -type PoAValidatorManagerOwnershipTransferred struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos +// PoAValidatorManagerCompletedValidatorWeightUpdate represents a CompletedValidatorWeightUpdate event raised by the PoAValidatorManager contract. +type PoAValidatorManagerCompletedValidatorWeightUpdate struct { + ValidationID [32]byte + Nonce uint64 + Weight uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// FilterCompletedValidatorWeightUpdate is a free log retrieval operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. // -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*PoAValidatorManagerOwnershipTransferredIterator, error) { +// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterCompletedValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte) (*PoAValidatorManagerCompletedValidatorWeightUpdateIterator, error) { - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) + + logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) + if err != nil { + return nil, err } + return &PoAValidatorManagerCompletedValidatorWeightUpdateIterator{contract: _PoAValidatorManager.contract, event: "CompletedValidatorWeightUpdate", logs: logs, sub: sub}, nil +} - logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) +// WatchCompletedValidatorWeightUpdate is a free log subscription operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. +// +// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchCompletedValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerCompletedValidatorWeightUpdate, validationID [][32]byte) (event.Subscription, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) if err != nil { return nil, err } - return &PoAValidatorManagerOwnershipTransferredIterator{contract: _PoAValidatorManager.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(PoAValidatorManagerCompletedValidatorWeightUpdate) + if err := _PoAValidatorManager.contract.UnpackLog(event, "CompletedValidatorWeightUpdate", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil } -// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// ParseCompletedValidatorWeightUpdate is a log parse operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. // -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { +// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseCompletedValidatorWeightUpdate(log types.Log) (*PoAValidatorManagerCompletedValidatorWeightUpdate, error) { + event := new(PoAValidatorManagerCompletedValidatorWeightUpdate) + if err := _PoAValidatorManager.contract.UnpackLog(event, "CompletedValidatorWeightUpdate", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) +// PoAValidatorManagerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the PoAValidatorManager contract. +type PoAValidatorManagerInitializedIterator struct { + Event *PoAValidatorManagerInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *PoAValidatorManagerInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(PoAValidatorManagerInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(PoAValidatorManagerInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() } +} - logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) +// Error returns any retrieval or parsing error occurred during filtering. +func (it *PoAValidatorManagerInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PoAValidatorManagerInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PoAValidatorManagerInitialized represents a Initialized event raised by the PoAValidatorManager contract. +type PoAValidatorManagerInitialized struct { + Version uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterInitialized(opts *bind.FilterOpts) (*PoAValidatorManagerInitializedIterator, error) { + + logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &PoAValidatorManagerInitializedIterator{contract: _PoAValidatorManager.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerInitialized) (event.Subscription, error) { + + logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "Initialized") if err != nil { return nil, err } @@ -1183,8 +1434,8 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchOwnershipTransferr select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(PoAValidatorManagerOwnershipTransferred) - if err := _PoAValidatorManager.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + event := new(PoAValidatorManagerInitialized) + if err := _PoAValidatorManager.contract.UnpackLog(event, "Initialized", log); err != nil { return err } event.Raw = log @@ -1205,21 +1456,21 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchOwnershipTransferr }), nil } -// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// ParseInitialized is a log parse operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. // -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseOwnershipTransferred(log types.Log) (*PoAValidatorManagerOwnershipTransferred, error) { - event := new(PoAValidatorManagerOwnershipTransferred) - if err := _PoAValidatorManager.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { +// Solidity: event Initialized(uint64 version) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseInitialized(log types.Log) (*PoAValidatorManagerInitialized, error) { + event := new(PoAValidatorManagerInitialized) + if err := _PoAValidatorManager.contract.UnpackLog(event, "Initialized", log); err != nil { return nil, err } event.Raw = log return event, nil } -// PoAValidatorManagerValidationPeriodCreatedIterator is returned from FilterValidationPeriodCreated and is used to iterate over the raw logs and unpacked data for ValidationPeriodCreated events raised by the PoAValidatorManager contract. -type PoAValidatorManagerValidationPeriodCreatedIterator struct { - Event *PoAValidatorManagerValidationPeriodCreated // Event containing the contract specifics and raw log +// PoAValidatorManagerInitiatedValidatorRegistrationIterator is returned from FilterInitiatedValidatorRegistration and is used to iterate over the raw logs and unpacked data for InitiatedValidatorRegistration events raised by the PoAValidatorManager contract. +type PoAValidatorManagerInitiatedValidatorRegistrationIterator struct { + Event *PoAValidatorManagerInitiatedValidatorRegistration // 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 @@ -1233,7 +1484,7 @@ type PoAValidatorManagerValidationPeriodCreatedIterator 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 *PoAValidatorManagerValidationPeriodCreatedIterator) Next() bool { +func (it *PoAValidatorManagerInitiatedValidatorRegistrationIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1242,7 +1493,7 @@ func (it *PoAValidatorManagerValidationPeriodCreatedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerValidationPeriodCreated) + it.Event = new(PoAValidatorManagerInitiatedValidatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1257,7 +1508,7 @@ func (it *PoAValidatorManagerValidationPeriodCreatedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerValidationPeriodCreated) + it.Event = new(PoAValidatorManagerInitiatedValidatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1273,63 +1524,63 @@ func (it *PoAValidatorManagerValidationPeriodCreatedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *PoAValidatorManagerValidationPeriodCreatedIterator) Error() error { +func (it *PoAValidatorManagerInitiatedValidatorRegistrationIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *PoAValidatorManagerValidationPeriodCreatedIterator) Close() error { +func (it *PoAValidatorManagerInitiatedValidatorRegistrationIterator) Close() error { it.sub.Unsubscribe() return nil } -// PoAValidatorManagerValidationPeriodCreated represents a ValidationPeriodCreated event raised by the PoAValidatorManager contract. -type PoAValidatorManagerValidationPeriodCreated struct { - ValidationID [32]byte - RegisterValidationMessageID [32]byte - Weight uint64 - NodeID []byte - RegistrationExpiry uint64 - Raw types.Log // Blockchain specific contextual infos +// PoAValidatorManagerInitiatedValidatorRegistration represents a InitiatedValidatorRegistration event raised by the PoAValidatorManager contract. +type PoAValidatorManagerInitiatedValidatorRegistration struct { + ValidationID [32]byte + NodeID [20]byte + RegistrationMessageID [32]byte + RegistrationExpiry uint64 + Weight uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterValidationPeriodCreated is a free log retrieval operation binding the contract event 0xe093cab27f3fc60439e008f3a2073310d3ac9ac9b7d59e53a06b2588f7498bd6. +// FilterInitiatedValidatorRegistration is a free log retrieval operation binding the contract event 0x5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d. // -// Solidity: event ValidationPeriodCreated(bytes32 indexed validationID, bytes32 indexed registerValidationMessageID, uint64 weight, bytes nodeID, uint64 registrationExpiry) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterValidationPeriodCreated(opts *bind.FilterOpts, validationID [][32]byte, registerValidationMessageID [][32]byte) (*PoAValidatorManagerValidationPeriodCreatedIterator, error) { +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes20 indexed nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterInitiatedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte, nodeID [][20]byte) (*PoAValidatorManagerInitiatedValidatorRegistrationIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var registerValidationMessageIDRule []interface{} - for _, registerValidationMessageIDItem := range registerValidationMessageID { - registerValidationMessageIDRule = append(registerValidationMessageIDRule, registerValidationMessageIDItem) + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) } - logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "ValidationPeriodCreated", validationIDRule, registerValidationMessageIDRule) + logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "InitiatedValidatorRegistration", validationIDRule, nodeIDRule) if err != nil { return nil, err } - return &PoAValidatorManagerValidationPeriodCreatedIterator{contract: _PoAValidatorManager.contract, event: "ValidationPeriodCreated", logs: logs, sub: sub}, nil + return &PoAValidatorManagerInitiatedValidatorRegistrationIterator{contract: _PoAValidatorManager.contract, event: "InitiatedValidatorRegistration", logs: logs, sub: sub}, nil } -// WatchValidationPeriodCreated is a free log subscription operation binding the contract event 0xe093cab27f3fc60439e008f3a2073310d3ac9ac9b7d59e53a06b2588f7498bd6. +// WatchInitiatedValidatorRegistration is a free log subscription operation binding the contract event 0x5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d. // -// Solidity: event ValidationPeriodCreated(bytes32 indexed validationID, bytes32 indexed registerValidationMessageID, uint64 weight, bytes nodeID, uint64 registrationExpiry) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidationPeriodCreated(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerValidationPeriodCreated, validationID [][32]byte, registerValidationMessageID [][32]byte) (event.Subscription, error) { +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes20 indexed nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchInitiatedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerInitiatedValidatorRegistration, validationID [][32]byte, nodeID [][20]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var registerValidationMessageIDRule []interface{} - for _, registerValidationMessageIDItem := range registerValidationMessageID { - registerValidationMessageIDRule = append(registerValidationMessageIDRule, registerValidationMessageIDItem) + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) } - logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "ValidationPeriodCreated", validationIDRule, registerValidationMessageIDRule) + logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "InitiatedValidatorRegistration", validationIDRule, nodeIDRule) if err != nil { return nil, err } @@ -1339,8 +1590,8 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidationPeriodCr select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(PoAValidatorManagerValidationPeriodCreated) - if err := _PoAValidatorManager.contract.UnpackLog(event, "ValidationPeriodCreated", log); err != nil { + event := new(PoAValidatorManagerInitiatedValidatorRegistration) + if err := _PoAValidatorManager.contract.UnpackLog(event, "InitiatedValidatorRegistration", log); err != nil { return err } event.Raw = log @@ -1361,21 +1612,21 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidationPeriodCr }), nil } -// ParseValidationPeriodCreated is a log parse operation binding the contract event 0xe093cab27f3fc60439e008f3a2073310d3ac9ac9b7d59e53a06b2588f7498bd6. +// ParseInitiatedValidatorRegistration is a log parse operation binding the contract event 0x5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d. // -// Solidity: event ValidationPeriodCreated(bytes32 indexed validationID, bytes32 indexed registerValidationMessageID, uint64 weight, bytes nodeID, uint64 registrationExpiry) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseValidationPeriodCreated(log types.Log) (*PoAValidatorManagerValidationPeriodCreated, error) { - event := new(PoAValidatorManagerValidationPeriodCreated) - if err := _PoAValidatorManager.contract.UnpackLog(event, "ValidationPeriodCreated", log); err != nil { +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes20 indexed nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseInitiatedValidatorRegistration(log types.Log) (*PoAValidatorManagerInitiatedValidatorRegistration, error) { + event := new(PoAValidatorManagerInitiatedValidatorRegistration) + if err := _PoAValidatorManager.contract.UnpackLog(event, "InitiatedValidatorRegistration", log); err != nil { return nil, err } event.Raw = log return event, nil } -// PoAValidatorManagerValidationPeriodEndedIterator is returned from FilterValidationPeriodEnded and is used to iterate over the raw logs and unpacked data for ValidationPeriodEnded events raised by the PoAValidatorManager contract. -type PoAValidatorManagerValidationPeriodEndedIterator struct { - Event *PoAValidatorManagerValidationPeriodEnded // Event containing the contract specifics and raw log +// PoAValidatorManagerInitiatedValidatorRemovalIterator is returned from FilterInitiatedValidatorRemoval and is used to iterate over the raw logs and unpacked data for InitiatedValidatorRemoval events raised by the PoAValidatorManager contract. +type PoAValidatorManagerInitiatedValidatorRemovalIterator struct { + Event *PoAValidatorManagerInitiatedValidatorRemoval // 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 @@ -1389,7 +1640,7 @@ type PoAValidatorManagerValidationPeriodEndedIterator 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 *PoAValidatorManagerValidationPeriodEndedIterator) Next() bool { +func (it *PoAValidatorManagerInitiatedValidatorRemovalIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1398,7 +1649,7 @@ func (it *PoAValidatorManagerValidationPeriodEndedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerValidationPeriodEnded) + it.Event = new(PoAValidatorManagerInitiatedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1413,7 +1664,7 @@ func (it *PoAValidatorManagerValidationPeriodEndedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerValidationPeriodEnded) + it.Event = new(PoAValidatorManagerInitiatedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1429,60 +1680,54 @@ func (it *PoAValidatorManagerValidationPeriodEndedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *PoAValidatorManagerValidationPeriodEndedIterator) Error() error { +func (it *PoAValidatorManagerInitiatedValidatorRemovalIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *PoAValidatorManagerValidationPeriodEndedIterator) Close() error { +func (it *PoAValidatorManagerInitiatedValidatorRemovalIterator) Close() error { it.sub.Unsubscribe() return nil } -// PoAValidatorManagerValidationPeriodEnded represents a ValidationPeriodEnded event raised by the PoAValidatorManager contract. -type PoAValidatorManagerValidationPeriodEnded struct { - ValidationID [32]byte - Status uint8 - Raw types.Log // Blockchain specific contextual infos +// PoAValidatorManagerInitiatedValidatorRemoval represents a InitiatedValidatorRemoval event raised by the PoAValidatorManager contract. +type PoAValidatorManagerInitiatedValidatorRemoval struct { + ValidationID [32]byte + ValidatorWeightMessageID [32]byte + Weight uint64 + EndTime uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterValidationPeriodEnded is a free log retrieval operation binding the contract event 0x1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16. +// FilterInitiatedValidatorRemoval is a free log retrieval operation binding the contract event 0xbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273. // -// Solidity: event ValidationPeriodEnded(bytes32 indexed validationID, uint8 indexed status) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterValidationPeriodEnded(opts *bind.FilterOpts, validationID [][32]byte, status []uint8) (*PoAValidatorManagerValidationPeriodEndedIterator, error) { +// Solidity: event InitiatedValidatorRemoval(bytes32 indexed validationID, bytes32 validatorWeightMessageID, uint64 weight, uint64 endTime) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterInitiatedValidatorRemoval(opts *bind.FilterOpts, validationID [][32]byte) (*PoAValidatorManagerInitiatedValidatorRemovalIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var statusRule []interface{} - for _, statusItem := range status { - statusRule = append(statusRule, statusItem) - } - logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "ValidationPeriodEnded", validationIDRule, statusRule) + logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "InitiatedValidatorRemoval", validationIDRule) if err != nil { return nil, err } - return &PoAValidatorManagerValidationPeriodEndedIterator{contract: _PoAValidatorManager.contract, event: "ValidationPeriodEnded", logs: logs, sub: sub}, nil + return &PoAValidatorManagerInitiatedValidatorRemovalIterator{contract: _PoAValidatorManager.contract, event: "InitiatedValidatorRemoval", logs: logs, sub: sub}, nil } -// WatchValidationPeriodEnded is a free log subscription operation binding the contract event 0x1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16. +// WatchInitiatedValidatorRemoval is a free log subscription operation binding the contract event 0xbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273. // -// Solidity: event ValidationPeriodEnded(bytes32 indexed validationID, uint8 indexed status) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidationPeriodEnded(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerValidationPeriodEnded, validationID [][32]byte, status []uint8) (event.Subscription, error) { +// Solidity: event InitiatedValidatorRemoval(bytes32 indexed validationID, bytes32 validatorWeightMessageID, uint64 weight, uint64 endTime) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchInitiatedValidatorRemoval(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerInitiatedValidatorRemoval, validationID [][32]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var statusRule []interface{} - for _, statusItem := range status { - statusRule = append(statusRule, statusItem) - } - logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "ValidationPeriodEnded", validationIDRule, statusRule) + logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "InitiatedValidatorRemoval", validationIDRule) if err != nil { return nil, err } @@ -1492,8 +1737,8 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidationPeriodEn select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(PoAValidatorManagerValidationPeriodEnded) - if err := _PoAValidatorManager.contract.UnpackLog(event, "ValidationPeriodEnded", log); err != nil { + event := new(PoAValidatorManagerInitiatedValidatorRemoval) + if err := _PoAValidatorManager.contract.UnpackLog(event, "InitiatedValidatorRemoval", log); err != nil { return err } event.Raw = log @@ -1514,21 +1759,21 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidationPeriodEn }), nil } -// ParseValidationPeriodEnded is a log parse operation binding the contract event 0x1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16. +// ParseInitiatedValidatorRemoval is a log parse operation binding the contract event 0xbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273. // -// Solidity: event ValidationPeriodEnded(bytes32 indexed validationID, uint8 indexed status) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseValidationPeriodEnded(log types.Log) (*PoAValidatorManagerValidationPeriodEnded, error) { - event := new(PoAValidatorManagerValidationPeriodEnded) - if err := _PoAValidatorManager.contract.UnpackLog(event, "ValidationPeriodEnded", log); err != nil { +// Solidity: event InitiatedValidatorRemoval(bytes32 indexed validationID, bytes32 validatorWeightMessageID, uint64 weight, uint64 endTime) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseInitiatedValidatorRemoval(log types.Log) (*PoAValidatorManagerInitiatedValidatorRemoval, error) { + event := new(PoAValidatorManagerInitiatedValidatorRemoval) + if err := _PoAValidatorManager.contract.UnpackLog(event, "InitiatedValidatorRemoval", log); err != nil { return nil, err } event.Raw = log return event, nil } -// PoAValidatorManagerValidationPeriodRegisteredIterator is returned from FilterValidationPeriodRegistered and is used to iterate over the raw logs and unpacked data for ValidationPeriodRegistered events raised by the PoAValidatorManager contract. -type PoAValidatorManagerValidationPeriodRegisteredIterator struct { - Event *PoAValidatorManagerValidationPeriodRegistered // Event containing the contract specifics and raw log +// PoAValidatorManagerInitiatedValidatorWeightUpdateIterator is returned from FilterInitiatedValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for InitiatedValidatorWeightUpdate events raised by the PoAValidatorManager contract. +type PoAValidatorManagerInitiatedValidatorWeightUpdateIterator struct { + Event *PoAValidatorManagerInitiatedValidatorWeightUpdate // 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 @@ -1542,7 +1787,7 @@ type PoAValidatorManagerValidationPeriodRegisteredIterator 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 *PoAValidatorManagerValidationPeriodRegisteredIterator) Next() bool { +func (it *PoAValidatorManagerInitiatedValidatorWeightUpdateIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1551,7 +1796,7 @@ func (it *PoAValidatorManagerValidationPeriodRegisteredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerValidationPeriodRegistered) + it.Event = new(PoAValidatorManagerInitiatedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1566,7 +1811,7 @@ func (it *PoAValidatorManagerValidationPeriodRegisteredIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerValidationPeriodRegistered) + it.Event = new(PoAValidatorManagerInitiatedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1582,53 +1827,54 @@ func (it *PoAValidatorManagerValidationPeriodRegisteredIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *PoAValidatorManagerValidationPeriodRegisteredIterator) Error() error { +func (it *PoAValidatorManagerInitiatedValidatorWeightUpdateIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *PoAValidatorManagerValidationPeriodRegisteredIterator) Close() error { +func (it *PoAValidatorManagerInitiatedValidatorWeightUpdateIterator) Close() error { it.sub.Unsubscribe() return nil } -// PoAValidatorManagerValidationPeriodRegistered represents a ValidationPeriodRegistered event raised by the PoAValidatorManager contract. -type PoAValidatorManagerValidationPeriodRegistered struct { - ValidationID [32]byte - Weight uint64 - Timestamp *big.Int - Raw types.Log // Blockchain specific contextual infos +// PoAValidatorManagerInitiatedValidatorWeightUpdate represents a InitiatedValidatorWeightUpdate event raised by the PoAValidatorManager contract. +type PoAValidatorManagerInitiatedValidatorWeightUpdate struct { + ValidationID [32]byte + Nonce uint64 + WeightUpdateMessageID [32]byte + Weight uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterValidationPeriodRegistered is a free log retrieval operation binding the contract event 0x8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b. +// FilterInitiatedValidatorWeightUpdate is a free log retrieval operation binding the contract event 0x6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d3. // -// Solidity: event ValidationPeriodRegistered(bytes32 indexed validationID, uint64 weight, uint256 timestamp) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterValidationPeriodRegistered(opts *bind.FilterOpts, validationID [][32]byte) (*PoAValidatorManagerValidationPeriodRegisteredIterator, error) { +// Solidity: event InitiatedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, bytes32 weightUpdateMessageID, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterInitiatedValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte) (*PoAValidatorManagerInitiatedValidatorWeightUpdateIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "ValidationPeriodRegistered", validationIDRule) + logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "InitiatedValidatorWeightUpdate", validationIDRule) if err != nil { return nil, err } - return &PoAValidatorManagerValidationPeriodRegisteredIterator{contract: _PoAValidatorManager.contract, event: "ValidationPeriodRegistered", logs: logs, sub: sub}, nil + return &PoAValidatorManagerInitiatedValidatorWeightUpdateIterator{contract: _PoAValidatorManager.contract, event: "InitiatedValidatorWeightUpdate", logs: logs, sub: sub}, nil } -// WatchValidationPeriodRegistered is a free log subscription operation binding the contract event 0x8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b. +// WatchInitiatedValidatorWeightUpdate is a free log subscription operation binding the contract event 0x6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d3. // -// Solidity: event ValidationPeriodRegistered(bytes32 indexed validationID, uint64 weight, uint256 timestamp) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidationPeriodRegistered(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerValidationPeriodRegistered, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event InitiatedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, bytes32 weightUpdateMessageID, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchInitiatedValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerInitiatedValidatorWeightUpdate, validationID [][32]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "ValidationPeriodRegistered", validationIDRule) + logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "InitiatedValidatorWeightUpdate", validationIDRule) if err != nil { return nil, err } @@ -1638,8 +1884,8 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidationPeriodRe select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(PoAValidatorManagerValidationPeriodRegistered) - if err := _PoAValidatorManager.contract.UnpackLog(event, "ValidationPeriodRegistered", log); err != nil { + event := new(PoAValidatorManagerInitiatedValidatorWeightUpdate) + if err := _PoAValidatorManager.contract.UnpackLog(event, "InitiatedValidatorWeightUpdate", log); err != nil { return err } event.Raw = log @@ -1660,21 +1906,21 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidationPeriodRe }), nil } -// ParseValidationPeriodRegistered is a log parse operation binding the contract event 0x8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b. +// ParseInitiatedValidatorWeightUpdate is a log parse operation binding the contract event 0x6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d3. // -// Solidity: event ValidationPeriodRegistered(bytes32 indexed validationID, uint64 weight, uint256 timestamp) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseValidationPeriodRegistered(log types.Log) (*PoAValidatorManagerValidationPeriodRegistered, error) { - event := new(PoAValidatorManagerValidationPeriodRegistered) - if err := _PoAValidatorManager.contract.UnpackLog(event, "ValidationPeriodRegistered", log); err != nil { +// Solidity: event InitiatedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, bytes32 weightUpdateMessageID, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseInitiatedValidatorWeightUpdate(log types.Log) (*PoAValidatorManagerInitiatedValidatorWeightUpdate, error) { + event := new(PoAValidatorManagerInitiatedValidatorWeightUpdate) + if err := _PoAValidatorManager.contract.UnpackLog(event, "InitiatedValidatorWeightUpdate", log); err != nil { return nil, err } event.Raw = log return event, nil } -// PoAValidatorManagerValidatorRemovalInitializedIterator is returned from FilterValidatorRemovalInitialized and is used to iterate over the raw logs and unpacked data for ValidatorRemovalInitialized events raised by the PoAValidatorManager contract. -type PoAValidatorManagerValidatorRemovalInitializedIterator struct { - Event *PoAValidatorManagerValidatorRemovalInitialized // Event containing the contract specifics and raw log +// PoAValidatorManagerOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the PoAValidatorManager contract. +type PoAValidatorManagerOwnershipTransferredIterator struct { + Event *PoAValidatorManagerOwnershipTransferred // 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 @@ -1688,7 +1934,7 @@ type PoAValidatorManagerValidatorRemovalInitializedIterator 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 *PoAValidatorManagerValidatorRemovalInitializedIterator) Next() bool { +func (it *PoAValidatorManagerOwnershipTransferredIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1697,7 +1943,7 @@ func (it *PoAValidatorManagerValidatorRemovalInitializedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerValidatorRemovalInitialized) + it.Event = new(PoAValidatorManagerOwnershipTransferred) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1712,7 +1958,7 @@ func (it *PoAValidatorManagerValidatorRemovalInitializedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerValidatorRemovalInitialized) + it.Event = new(PoAValidatorManagerOwnershipTransferred) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1728,62 +1974,60 @@ func (it *PoAValidatorManagerValidatorRemovalInitializedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *PoAValidatorManagerValidatorRemovalInitializedIterator) Error() error { +func (it *PoAValidatorManagerOwnershipTransferredIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *PoAValidatorManagerValidatorRemovalInitializedIterator) Close() error { +func (it *PoAValidatorManagerOwnershipTransferredIterator) Close() error { it.sub.Unsubscribe() return nil } -// PoAValidatorManagerValidatorRemovalInitialized represents a ValidatorRemovalInitialized event raised by the PoAValidatorManager contract. -type PoAValidatorManagerValidatorRemovalInitialized struct { - ValidationID [32]byte - SetWeightMessageID [32]byte - Weight uint64 - EndTime *big.Int - Raw types.Log // Blockchain specific contextual infos +// PoAValidatorManagerOwnershipTransferred represents a OwnershipTransferred event raised by the PoAValidatorManager contract. +type PoAValidatorManagerOwnershipTransferred struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterValidatorRemovalInitialized is a free log retrieval operation binding the contract event 0xfbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42. +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. // -// Solidity: event ValidatorRemovalInitialized(bytes32 indexed validationID, bytes32 indexed setWeightMessageID, uint64 weight, uint256 endTime) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterValidatorRemovalInitialized(opts *bind.FilterOpts, validationID [][32]byte, setWeightMessageID [][32]byte) (*PoAValidatorManagerValidatorRemovalInitializedIterator, error) { +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*PoAValidatorManagerOwnershipTransferredIterator, error) { - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) } - var setWeightMessageIDRule []interface{} - for _, setWeightMessageIDItem := range setWeightMessageID { - setWeightMessageIDRule = append(setWeightMessageIDRule, setWeightMessageIDItem) + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) } - logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "ValidatorRemovalInitialized", validationIDRule, setWeightMessageIDRule) + logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) if err != nil { return nil, err } - return &PoAValidatorManagerValidatorRemovalInitializedIterator{contract: _PoAValidatorManager.contract, event: "ValidatorRemovalInitialized", logs: logs, sub: sub}, nil + return &PoAValidatorManagerOwnershipTransferredIterator{contract: _PoAValidatorManager.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil } -// WatchValidatorRemovalInitialized is a free log subscription operation binding the contract event 0xfbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42. +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. // -// Solidity: event ValidatorRemovalInitialized(bytes32 indexed validationID, bytes32 indexed setWeightMessageID, uint64 weight, uint256 endTime) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidatorRemovalInitialized(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerValidatorRemovalInitialized, validationID [][32]byte, setWeightMessageID [][32]byte) (event.Subscription, error) { +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) } - var setWeightMessageIDRule []interface{} - for _, setWeightMessageIDItem := range setWeightMessageID { - setWeightMessageIDRule = append(setWeightMessageIDRule, setWeightMessageIDItem) + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) } - logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "ValidatorRemovalInitialized", validationIDRule, setWeightMessageIDRule) + logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) if err != nil { return nil, err } @@ -1793,8 +2037,8 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidatorRemovalIn select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(PoAValidatorManagerValidatorRemovalInitialized) - if err := _PoAValidatorManager.contract.UnpackLog(event, "ValidatorRemovalInitialized", log); err != nil { + event := new(PoAValidatorManagerOwnershipTransferred) + if err := _PoAValidatorManager.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { return err } event.Raw = log @@ -1815,21 +2059,21 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidatorRemovalIn }), nil } -// ParseValidatorRemovalInitialized is a log parse operation binding the contract event 0xfbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42. +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. // -// Solidity: event ValidatorRemovalInitialized(bytes32 indexed validationID, bytes32 indexed setWeightMessageID, uint64 weight, uint256 endTime) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseValidatorRemovalInitialized(log types.Log) (*PoAValidatorManagerValidatorRemovalInitialized, error) { - event := new(PoAValidatorManagerValidatorRemovalInitialized) - if err := _PoAValidatorManager.contract.UnpackLog(event, "ValidatorRemovalInitialized", log); err != nil { +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseOwnershipTransferred(log types.Log) (*PoAValidatorManagerOwnershipTransferred, error) { + event := new(PoAValidatorManagerOwnershipTransferred) + if err := _PoAValidatorManager.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { return nil, err } event.Raw = log return event, nil } -// PoAValidatorManagerValidatorWeightUpdateIterator is returned from FilterValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for ValidatorWeightUpdate events raised by the PoAValidatorManager contract. -type PoAValidatorManagerValidatorWeightUpdateIterator struct { - Event *PoAValidatorManagerValidatorWeightUpdate // Event containing the contract specifics and raw log +// PoAValidatorManagerRegisteredInitialValidatorIterator is returned from FilterRegisteredInitialValidator and is used to iterate over the raw logs and unpacked data for RegisteredInitialValidator events raised by the PoAValidatorManager contract. +type PoAValidatorManagerRegisteredInitialValidatorIterator struct { + Event *PoAValidatorManagerRegisteredInitialValidator // 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 @@ -1843,7 +2087,7 @@ type PoAValidatorManagerValidatorWeightUpdateIterator 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 *PoAValidatorManagerValidatorWeightUpdateIterator) Next() bool { +func (it *PoAValidatorManagerRegisteredInitialValidatorIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1852,7 +2096,7 @@ func (it *PoAValidatorManagerValidatorWeightUpdateIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerValidatorWeightUpdate) + it.Event = new(PoAValidatorManagerRegisteredInitialValidator) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1867,7 +2111,7 @@ func (it *PoAValidatorManagerValidatorWeightUpdateIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerValidatorWeightUpdate) + it.Event = new(PoAValidatorManagerRegisteredInitialValidator) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1883,62 +2127,61 @@ func (it *PoAValidatorManagerValidatorWeightUpdateIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *PoAValidatorManagerValidatorWeightUpdateIterator) Error() error { +func (it *PoAValidatorManagerRegisteredInitialValidatorIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *PoAValidatorManagerValidatorWeightUpdateIterator) Close() error { +func (it *PoAValidatorManagerRegisteredInitialValidatorIterator) Close() error { it.sub.Unsubscribe() return nil } -// PoAValidatorManagerValidatorWeightUpdate represents a ValidatorWeightUpdate event raised by the PoAValidatorManager contract. -type PoAValidatorManagerValidatorWeightUpdate struct { - ValidationID [32]byte - Nonce uint64 - Weight uint64 - SetWeightMessageID [32]byte - Raw types.Log // Blockchain specific contextual infos +// PoAValidatorManagerRegisteredInitialValidator represents a RegisteredInitialValidator event raised by the PoAValidatorManager contract. +type PoAValidatorManagerRegisteredInitialValidator struct { + ValidationID [32]byte + NodeID [20]byte + Weight uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterValidatorWeightUpdate is a free log retrieval operation binding the contract event 0x07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df. +// FilterRegisteredInitialValidator is a free log retrieval operation binding the contract event 0x9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d7. // -// Solidity: event ValidatorWeightUpdate(bytes32 indexed validationID, uint64 indexed nonce, uint64 weight, bytes32 setWeightMessageID) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte, nonce []uint64) (*PoAValidatorManagerValidatorWeightUpdateIterator, error) { +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterRegisteredInitialValidator(opts *bind.FilterOpts, validationID [][32]byte, nodeID [][20]byte) (*PoAValidatorManagerRegisteredInitialValidatorIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var nonceRule []interface{} - for _, nonceItem := range nonce { - nonceRule = append(nonceRule, nonceItem) + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) } - logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "ValidatorWeightUpdate", validationIDRule, nonceRule) + logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "RegisteredInitialValidator", validationIDRule, nodeIDRule) if err != nil { return nil, err } - return &PoAValidatorManagerValidatorWeightUpdateIterator{contract: _PoAValidatorManager.contract, event: "ValidatorWeightUpdate", logs: logs, sub: sub}, nil + return &PoAValidatorManagerRegisteredInitialValidatorIterator{contract: _PoAValidatorManager.contract, event: "RegisteredInitialValidator", logs: logs, sub: sub}, nil } -// WatchValidatorWeightUpdate is a free log subscription operation binding the contract event 0x07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df. +// WatchRegisteredInitialValidator is a free log subscription operation binding the contract event 0x9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d7. // -// Solidity: event ValidatorWeightUpdate(bytes32 indexed validationID, uint64 indexed nonce, uint64 weight, bytes32 setWeightMessageID) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerValidatorWeightUpdate, validationID [][32]byte, nonce []uint64) (event.Subscription, error) { +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchRegisteredInitialValidator(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerRegisteredInitialValidator, validationID [][32]byte, nodeID [][20]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var nonceRule []interface{} - for _, nonceItem := range nonce { - nonceRule = append(nonceRule, nonceItem) + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) } - logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "ValidatorWeightUpdate", validationIDRule, nonceRule) + logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "RegisteredInitialValidator", validationIDRule, nodeIDRule) if err != nil { return nil, err } @@ -1948,8 +2191,8 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidatorWeightUpd select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(PoAValidatorManagerValidatorWeightUpdate) - if err := _PoAValidatorManager.contract.UnpackLog(event, "ValidatorWeightUpdate", log); err != nil { + event := new(PoAValidatorManagerRegisteredInitialValidator) + if err := _PoAValidatorManager.contract.UnpackLog(event, "RegisteredInitialValidator", log); err != nil { return err } event.Raw = log @@ -1970,12 +2213,12 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidatorWeightUpd }), nil } -// ParseValidatorWeightUpdate is a log parse operation binding the contract event 0x07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df. +// ParseRegisteredInitialValidator is a log parse operation binding the contract event 0x9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d7. // -// Solidity: event ValidatorWeightUpdate(bytes32 indexed validationID, uint64 indexed nonce, uint64 weight, bytes32 setWeightMessageID) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseValidatorWeightUpdate(log types.Log) (*PoAValidatorManagerValidatorWeightUpdate, error) { - event := new(PoAValidatorManagerValidatorWeightUpdate) - if err := _PoAValidatorManager.contract.UnpackLog(event, "ValidatorWeightUpdate", log); err != nil { +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseRegisteredInitialValidator(log types.Log) (*PoAValidatorManagerRegisteredInitialValidator, error) { + event := new(PoAValidatorManagerRegisteredInitialValidator) + if err := _PoAValidatorManager.contract.UnpackLog(event, "RegisteredInitialValidator", log); err != nil { return nil, err } event.Raw = log @@ -1985,7 +2228,7 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseValidatorWeightUpd // 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: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea26469706673582212207a0b6ee4bb75144dd6b8635b3883de8d9364507951a0e3d076ca36181dac9a1764736f6c63430008190033", + Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea2646970667358221220e6b22cfbb2dc3686c9e5d5c46b42e65620ca6777a1371e31c12b720ad3c60ea464736f6c63430008190033", } // ValidatorMessagesABI 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 89b1d3b28..a9a1ef28a 100644 --- a/abi-bindings/go/validator-manager/interfaces/IPoSValidatorManager/IPoSValidatorManager.go +++ b/abi-bindings/go/validator-manager/interfaces/IPoSValidatorManager/IPoSValidatorManager.go @@ -29,24 +29,9 @@ 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 -} - // 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\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InitialValidatorCreated\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"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\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"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\":[{\"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\":\"messsageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"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\":\"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\"}]", } // IPoSValidatorManagerABI is the input ABI used to generate the binding from. @@ -300,48 +285,6 @@ func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) CompleteEndD return _IPoSValidatorManager.Contract.CompleteEndDelegation(&_IPoSValidatorManager.TransactOpts, delegationID, messageIndex) } -// CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. -// -// Solidity: function completeEndValidation(uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) CompleteEndValidation(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.contract.Transact(opts, "completeEndValidation", messageIndex) -} - -// CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. -// -// Solidity: function completeEndValidation(uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerSession) CompleteEndValidation(messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.CompleteEndValidation(&_IPoSValidatorManager.TransactOpts, messageIndex) -} - -// CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. -// -// Solidity: function completeEndValidation(uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) CompleteEndValidation(messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.CompleteEndValidation(&_IPoSValidatorManager.TransactOpts, messageIndex) -} - -// CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. -// -// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) CompleteValidatorRegistration(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.contract.Transact(opts, "completeValidatorRegistration", messageIndex) -} - -// CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. -// -// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerSession) CompleteValidatorRegistration(messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.CompleteValidatorRegistration(&_IPoSValidatorManager.TransactOpts, messageIndex) -} - -// CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. -// -// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) CompleteValidatorRegistration(messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.CompleteValidatorRegistration(&_IPoSValidatorManager.TransactOpts, messageIndex) -} - // ForceInitializeEndDelegation is a paid mutator transaction binding the contract method 0x1ec44724. // // Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() @@ -510,27 +453,6 @@ func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) InitializeEn return _IPoSValidatorManager.Contract.InitializeEndValidation0(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. -// -// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messsageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) InitializeValidatorSet(opts *bind.TransactOpts, conversionData ConversionData, messsageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.contract.Transact(opts, "initializeValidatorSet", conversionData, messsageIndex) -} - -// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. -// -// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messsageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerSession) InitializeValidatorSet(conversionData ConversionData, messsageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.InitializeValidatorSet(&_IPoSValidatorManager.TransactOpts, conversionData, messsageIndex) -} - -// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. -// -// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messsageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) InitializeValidatorSet(conversionData ConversionData, messsageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.InitializeValidatorSet(&_IPoSValidatorManager.TransactOpts, conversionData, messsageIndex) -} - // ResendEndValidatorMessage is a paid mutator transaction binding the contract method 0x0322ed98. // // Solidity: function resendEndValidatorMessage(bytes32 validationID) returns() @@ -1243,152 +1165,6 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseDelegatorRemoval return event, nil } -// IPoSValidatorManagerInitialValidatorCreatedIterator is returned from FilterInitialValidatorCreated and is used to iterate over the raw logs and unpacked data for InitialValidatorCreated events raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerInitialValidatorCreatedIterator struct { - Event *IPoSValidatorManagerInitialValidatorCreated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub interfaces.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *IPoSValidatorManagerInitialValidatorCreatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(IPoSValidatorManagerInitialValidatorCreated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(IPoSValidatorManagerInitialValidatorCreated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *IPoSValidatorManagerInitialValidatorCreatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IPoSValidatorManagerInitialValidatorCreatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IPoSValidatorManagerInitialValidatorCreated represents a InitialValidatorCreated event raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerInitialValidatorCreated struct { - ValidationID [32]byte - Weight uint64 - NodeID []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialValidatorCreated is a free log retrieval operation binding the contract event 0xd80a750132c7a4fb67e226bdfecab0d8609bbb4e48cdad62cee218f25b758fff. -// -// Solidity: event InitialValidatorCreated(bytes32 indexed validationID, uint64 weight, bytes nodeID) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterInitialValidatorCreated(opts *bind.FilterOpts, validationID [][32]byte) (*IPoSValidatorManagerInitialValidatorCreatedIterator, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - - logs, sub, err := _IPoSValidatorManager.contract.FilterLogs(opts, "InitialValidatorCreated", validationIDRule) - if err != nil { - return nil, err - } - return &IPoSValidatorManagerInitialValidatorCreatedIterator{contract: _IPoSValidatorManager.contract, event: "InitialValidatorCreated", logs: logs, sub: sub}, nil -} - -// WatchInitialValidatorCreated is a free log subscription operation binding the contract event 0xd80a750132c7a4fb67e226bdfecab0d8609bbb4e48cdad62cee218f25b758fff. -// -// Solidity: event InitialValidatorCreated(bytes32 indexed validationID, uint64 weight, bytes nodeID) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchInitialValidatorCreated(opts *bind.WatchOpts, sink chan<- *IPoSValidatorManagerInitialValidatorCreated, validationID [][32]byte) (event.Subscription, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - - logs, sub, err := _IPoSValidatorManager.contract.WatchLogs(opts, "InitialValidatorCreated", validationIDRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(IPoSValidatorManagerInitialValidatorCreated) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "InitialValidatorCreated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseInitialValidatorCreated is a log parse operation binding the contract event 0xd80a750132c7a4fb67e226bdfecab0d8609bbb4e48cdad62cee218f25b758fff. -// -// Solidity: event InitialValidatorCreated(bytes32 indexed validationID, uint64 weight, bytes nodeID) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseInitialValidatorCreated(log types.Log) (*IPoSValidatorManagerInitialValidatorCreated, error) { - event := new(IPoSValidatorManagerInitialValidatorCreated) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "InitialValidatorCreated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // IPoSValidatorManagerUptimeUpdatedIterator is returned from FilterUptimeUpdated and is used to iterate over the raw logs and unpacked data for UptimeUpdated events raised by the IPoSValidatorManager contract. type IPoSValidatorManagerUptimeUpdatedIterator struct { Event *IPoSValidatorManagerUptimeUpdated // Event containing the contract specifics and raw log @@ -1533,768 +1309,3 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseUptimeUpdated(lo event.Raw = log return event, nil } - -// IPoSValidatorManagerValidationPeriodCreatedIterator is returned from FilterValidationPeriodCreated and is used to iterate over the raw logs and unpacked data for ValidationPeriodCreated events raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerValidationPeriodCreatedIterator struct { - Event *IPoSValidatorManagerValidationPeriodCreated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub interfaces.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *IPoSValidatorManagerValidationPeriodCreatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(IPoSValidatorManagerValidationPeriodCreated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(IPoSValidatorManagerValidationPeriodCreated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *IPoSValidatorManagerValidationPeriodCreatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IPoSValidatorManagerValidationPeriodCreatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IPoSValidatorManagerValidationPeriodCreated represents a ValidationPeriodCreated event raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerValidationPeriodCreated struct { - ValidationID [32]byte - RegisterValidationMessageID [32]byte - Weight uint64 - NodeID []byte - RegistrationExpiry uint64 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterValidationPeriodCreated is a free log retrieval operation binding the contract event 0xe093cab27f3fc60439e008f3a2073310d3ac9ac9b7d59e53a06b2588f7498bd6. -// -// Solidity: event ValidationPeriodCreated(bytes32 indexed validationID, bytes32 indexed registerValidationMessageID, uint64 weight, bytes nodeID, uint64 registrationExpiry) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterValidationPeriodCreated(opts *bind.FilterOpts, validationID [][32]byte, registerValidationMessageID [][32]byte) (*IPoSValidatorManagerValidationPeriodCreatedIterator, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var registerValidationMessageIDRule []interface{} - for _, registerValidationMessageIDItem := range registerValidationMessageID { - registerValidationMessageIDRule = append(registerValidationMessageIDRule, registerValidationMessageIDItem) - } - - logs, sub, err := _IPoSValidatorManager.contract.FilterLogs(opts, "ValidationPeriodCreated", validationIDRule, registerValidationMessageIDRule) - if err != nil { - return nil, err - } - return &IPoSValidatorManagerValidationPeriodCreatedIterator{contract: _IPoSValidatorManager.contract, event: "ValidationPeriodCreated", logs: logs, sub: sub}, nil -} - -// WatchValidationPeriodCreated is a free log subscription operation binding the contract event 0xe093cab27f3fc60439e008f3a2073310d3ac9ac9b7d59e53a06b2588f7498bd6. -// -// Solidity: event ValidationPeriodCreated(bytes32 indexed validationID, bytes32 indexed registerValidationMessageID, uint64 weight, bytes nodeID, uint64 registrationExpiry) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchValidationPeriodCreated(opts *bind.WatchOpts, sink chan<- *IPoSValidatorManagerValidationPeriodCreated, validationID [][32]byte, registerValidationMessageID [][32]byte) (event.Subscription, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var registerValidationMessageIDRule []interface{} - for _, registerValidationMessageIDItem := range registerValidationMessageID { - registerValidationMessageIDRule = append(registerValidationMessageIDRule, registerValidationMessageIDItem) - } - - logs, sub, err := _IPoSValidatorManager.contract.WatchLogs(opts, "ValidationPeriodCreated", validationIDRule, registerValidationMessageIDRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(IPoSValidatorManagerValidationPeriodCreated) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "ValidationPeriodCreated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseValidationPeriodCreated is a log parse operation binding the contract event 0xe093cab27f3fc60439e008f3a2073310d3ac9ac9b7d59e53a06b2588f7498bd6. -// -// Solidity: event ValidationPeriodCreated(bytes32 indexed validationID, bytes32 indexed registerValidationMessageID, uint64 weight, bytes nodeID, uint64 registrationExpiry) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseValidationPeriodCreated(log types.Log) (*IPoSValidatorManagerValidationPeriodCreated, error) { - event := new(IPoSValidatorManagerValidationPeriodCreated) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "ValidationPeriodCreated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// IPoSValidatorManagerValidationPeriodEndedIterator is returned from FilterValidationPeriodEnded and is used to iterate over the raw logs and unpacked data for ValidationPeriodEnded events raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerValidationPeriodEndedIterator struct { - Event *IPoSValidatorManagerValidationPeriodEnded // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub interfaces.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *IPoSValidatorManagerValidationPeriodEndedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(IPoSValidatorManagerValidationPeriodEnded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(IPoSValidatorManagerValidationPeriodEnded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *IPoSValidatorManagerValidationPeriodEndedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IPoSValidatorManagerValidationPeriodEndedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IPoSValidatorManagerValidationPeriodEnded represents a ValidationPeriodEnded event raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerValidationPeriodEnded struct { - ValidationID [32]byte - Status uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterValidationPeriodEnded is a free log retrieval operation binding the contract event 0x1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16. -// -// Solidity: event ValidationPeriodEnded(bytes32 indexed validationID, uint8 indexed status) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterValidationPeriodEnded(opts *bind.FilterOpts, validationID [][32]byte, status []uint8) (*IPoSValidatorManagerValidationPeriodEndedIterator, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var statusRule []interface{} - for _, statusItem := range status { - statusRule = append(statusRule, statusItem) - } - - logs, sub, err := _IPoSValidatorManager.contract.FilterLogs(opts, "ValidationPeriodEnded", validationIDRule, statusRule) - if err != nil { - return nil, err - } - return &IPoSValidatorManagerValidationPeriodEndedIterator{contract: _IPoSValidatorManager.contract, event: "ValidationPeriodEnded", logs: logs, sub: sub}, nil -} - -// WatchValidationPeriodEnded is a free log subscription operation binding the contract event 0x1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16. -// -// Solidity: event ValidationPeriodEnded(bytes32 indexed validationID, uint8 indexed status) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchValidationPeriodEnded(opts *bind.WatchOpts, sink chan<- *IPoSValidatorManagerValidationPeriodEnded, validationID [][32]byte, status []uint8) (event.Subscription, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var statusRule []interface{} - for _, statusItem := range status { - statusRule = append(statusRule, statusItem) - } - - logs, sub, err := _IPoSValidatorManager.contract.WatchLogs(opts, "ValidationPeriodEnded", validationIDRule, statusRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(IPoSValidatorManagerValidationPeriodEnded) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "ValidationPeriodEnded", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseValidationPeriodEnded is a log parse operation binding the contract event 0x1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16. -// -// Solidity: event ValidationPeriodEnded(bytes32 indexed validationID, uint8 indexed status) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseValidationPeriodEnded(log types.Log) (*IPoSValidatorManagerValidationPeriodEnded, error) { - event := new(IPoSValidatorManagerValidationPeriodEnded) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "ValidationPeriodEnded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// IPoSValidatorManagerValidationPeriodRegisteredIterator is returned from FilterValidationPeriodRegistered and is used to iterate over the raw logs and unpacked data for ValidationPeriodRegistered events raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerValidationPeriodRegisteredIterator struct { - Event *IPoSValidatorManagerValidationPeriodRegistered // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub interfaces.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *IPoSValidatorManagerValidationPeriodRegisteredIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(IPoSValidatorManagerValidationPeriodRegistered) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(IPoSValidatorManagerValidationPeriodRegistered) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *IPoSValidatorManagerValidationPeriodRegisteredIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IPoSValidatorManagerValidationPeriodRegisteredIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IPoSValidatorManagerValidationPeriodRegistered represents a ValidationPeriodRegistered event raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerValidationPeriodRegistered struct { - ValidationID [32]byte - Weight uint64 - Timestamp *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterValidationPeriodRegistered is a free log retrieval operation binding the contract event 0x8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b. -// -// Solidity: event ValidationPeriodRegistered(bytes32 indexed validationID, uint64 weight, uint256 timestamp) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterValidationPeriodRegistered(opts *bind.FilterOpts, validationID [][32]byte) (*IPoSValidatorManagerValidationPeriodRegisteredIterator, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - - logs, sub, err := _IPoSValidatorManager.contract.FilterLogs(opts, "ValidationPeriodRegistered", validationIDRule) - if err != nil { - return nil, err - } - return &IPoSValidatorManagerValidationPeriodRegisteredIterator{contract: _IPoSValidatorManager.contract, event: "ValidationPeriodRegistered", logs: logs, sub: sub}, nil -} - -// WatchValidationPeriodRegistered is a free log subscription operation binding the contract event 0x8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b. -// -// Solidity: event ValidationPeriodRegistered(bytes32 indexed validationID, uint64 weight, uint256 timestamp) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchValidationPeriodRegistered(opts *bind.WatchOpts, sink chan<- *IPoSValidatorManagerValidationPeriodRegistered, validationID [][32]byte) (event.Subscription, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - - logs, sub, err := _IPoSValidatorManager.contract.WatchLogs(opts, "ValidationPeriodRegistered", validationIDRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(IPoSValidatorManagerValidationPeriodRegistered) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "ValidationPeriodRegistered", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseValidationPeriodRegistered is a log parse operation binding the contract event 0x8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b. -// -// Solidity: event ValidationPeriodRegistered(bytes32 indexed validationID, uint64 weight, uint256 timestamp) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseValidationPeriodRegistered(log types.Log) (*IPoSValidatorManagerValidationPeriodRegistered, error) { - event := new(IPoSValidatorManagerValidationPeriodRegistered) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "ValidationPeriodRegistered", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// IPoSValidatorManagerValidatorRemovalInitializedIterator is returned from FilterValidatorRemovalInitialized and is used to iterate over the raw logs and unpacked data for ValidatorRemovalInitialized events raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerValidatorRemovalInitializedIterator struct { - Event *IPoSValidatorManagerValidatorRemovalInitialized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub interfaces.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *IPoSValidatorManagerValidatorRemovalInitializedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(IPoSValidatorManagerValidatorRemovalInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(IPoSValidatorManagerValidatorRemovalInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *IPoSValidatorManagerValidatorRemovalInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IPoSValidatorManagerValidatorRemovalInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IPoSValidatorManagerValidatorRemovalInitialized represents a ValidatorRemovalInitialized event raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerValidatorRemovalInitialized struct { - ValidationID [32]byte - SetWeightMessageID [32]byte - Weight uint64 - EndTime *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterValidatorRemovalInitialized is a free log retrieval operation binding the contract event 0xfbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42. -// -// Solidity: event ValidatorRemovalInitialized(bytes32 indexed validationID, bytes32 indexed setWeightMessageID, uint64 weight, uint256 endTime) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterValidatorRemovalInitialized(opts *bind.FilterOpts, validationID [][32]byte, setWeightMessageID [][32]byte) (*IPoSValidatorManagerValidatorRemovalInitializedIterator, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var setWeightMessageIDRule []interface{} - for _, setWeightMessageIDItem := range setWeightMessageID { - setWeightMessageIDRule = append(setWeightMessageIDRule, setWeightMessageIDItem) - } - - logs, sub, err := _IPoSValidatorManager.contract.FilterLogs(opts, "ValidatorRemovalInitialized", validationIDRule, setWeightMessageIDRule) - if err != nil { - return nil, err - } - return &IPoSValidatorManagerValidatorRemovalInitializedIterator{contract: _IPoSValidatorManager.contract, event: "ValidatorRemovalInitialized", logs: logs, sub: sub}, nil -} - -// WatchValidatorRemovalInitialized is a free log subscription operation binding the contract event 0xfbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42. -// -// Solidity: event ValidatorRemovalInitialized(bytes32 indexed validationID, bytes32 indexed setWeightMessageID, uint64 weight, uint256 endTime) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchValidatorRemovalInitialized(opts *bind.WatchOpts, sink chan<- *IPoSValidatorManagerValidatorRemovalInitialized, validationID [][32]byte, setWeightMessageID [][32]byte) (event.Subscription, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var setWeightMessageIDRule []interface{} - for _, setWeightMessageIDItem := range setWeightMessageID { - setWeightMessageIDRule = append(setWeightMessageIDRule, setWeightMessageIDItem) - } - - logs, sub, err := _IPoSValidatorManager.contract.WatchLogs(opts, "ValidatorRemovalInitialized", validationIDRule, setWeightMessageIDRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(IPoSValidatorManagerValidatorRemovalInitialized) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "ValidatorRemovalInitialized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseValidatorRemovalInitialized is a log parse operation binding the contract event 0xfbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42. -// -// Solidity: event ValidatorRemovalInitialized(bytes32 indexed validationID, bytes32 indexed setWeightMessageID, uint64 weight, uint256 endTime) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseValidatorRemovalInitialized(log types.Log) (*IPoSValidatorManagerValidatorRemovalInitialized, error) { - event := new(IPoSValidatorManagerValidatorRemovalInitialized) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "ValidatorRemovalInitialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// IPoSValidatorManagerValidatorWeightUpdateIterator is returned from FilterValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for ValidatorWeightUpdate events raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerValidatorWeightUpdateIterator struct { - Event *IPoSValidatorManagerValidatorWeightUpdate // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub interfaces.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *IPoSValidatorManagerValidatorWeightUpdateIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(IPoSValidatorManagerValidatorWeightUpdate) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(IPoSValidatorManagerValidatorWeightUpdate) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *IPoSValidatorManagerValidatorWeightUpdateIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IPoSValidatorManagerValidatorWeightUpdateIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IPoSValidatorManagerValidatorWeightUpdate represents a ValidatorWeightUpdate event raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerValidatorWeightUpdate struct { - ValidationID [32]byte - Nonce uint64 - Weight uint64 - SetWeightMessageID [32]byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterValidatorWeightUpdate is a free log retrieval operation binding the contract event 0x07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df. -// -// Solidity: event ValidatorWeightUpdate(bytes32 indexed validationID, uint64 indexed nonce, uint64 weight, bytes32 setWeightMessageID) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte, nonce []uint64) (*IPoSValidatorManagerValidatorWeightUpdateIterator, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var nonceRule []interface{} - for _, nonceItem := range nonce { - nonceRule = append(nonceRule, nonceItem) - } - - logs, sub, err := _IPoSValidatorManager.contract.FilterLogs(opts, "ValidatorWeightUpdate", validationIDRule, nonceRule) - if err != nil { - return nil, err - } - return &IPoSValidatorManagerValidatorWeightUpdateIterator{contract: _IPoSValidatorManager.contract, event: "ValidatorWeightUpdate", logs: logs, sub: sub}, nil -} - -// WatchValidatorWeightUpdate is a free log subscription operation binding the contract event 0x07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df. -// -// Solidity: event ValidatorWeightUpdate(bytes32 indexed validationID, uint64 indexed nonce, uint64 weight, bytes32 setWeightMessageID) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *IPoSValidatorManagerValidatorWeightUpdate, validationID [][32]byte, nonce []uint64) (event.Subscription, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var nonceRule []interface{} - for _, nonceItem := range nonce { - nonceRule = append(nonceRule, nonceItem) - } - - logs, sub, err := _IPoSValidatorManager.contract.WatchLogs(opts, "ValidatorWeightUpdate", validationIDRule, nonceRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(IPoSValidatorManagerValidatorWeightUpdate) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "ValidatorWeightUpdate", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseValidatorWeightUpdate is a log parse operation binding the contract event 0x07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df. -// -// Solidity: event ValidatorWeightUpdate(bytes32 indexed validationID, uint64 indexed nonce, uint64 weight, bytes32 setWeightMessageID) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseValidatorWeightUpdate(log types.Log) (*IPoSValidatorManagerValidatorWeightUpdate, error) { - event := new(IPoSValidatorManagerValidatorWeightUpdate) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "ValidatorWeightUpdate", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/abi-bindings/go/validator-manager/interfaces/IValidatorManager/IValidatorManager.go b/abi-bindings/go/validator-manager/interfaces/IValidatorManager/IValidatorManager.go index 111992f1d..b09593664 100644 --- a/abi-bindings/go/validator-manager/interfaces/IValidatorManager/IValidatorManager.go +++ b/abi-bindings/go/validator-manager/interfaces/IValidatorManager/IValidatorManager.go @@ -29,24 +29,9 @@ 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 -} - // IValidatorManagerMetaData contains all meta data concerning the IValidatorManager contract. var IValidatorManagerMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"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\":\"messsageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"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\"}]", + 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. @@ -195,69 +180,6 @@ func (_IValidatorManager *IValidatorManagerTransactorRaw) Transact(opts *bind.Tr return _IValidatorManager.Contract.contract.Transact(opts, method, params...) } -// CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. -// -// Solidity: function completeEndValidation(uint32 messageIndex) returns() -func (_IValidatorManager *IValidatorManagerTransactor) CompleteEndValidation(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { - return _IValidatorManager.contract.Transact(opts, "completeEndValidation", messageIndex) -} - -// CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. -// -// Solidity: function completeEndValidation(uint32 messageIndex) returns() -func (_IValidatorManager *IValidatorManagerSession) CompleteEndValidation(messageIndex uint32) (*types.Transaction, error) { - return _IValidatorManager.Contract.CompleteEndValidation(&_IValidatorManager.TransactOpts, messageIndex) -} - -// CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. -// -// Solidity: function completeEndValidation(uint32 messageIndex) returns() -func (_IValidatorManager *IValidatorManagerTransactorSession) CompleteEndValidation(messageIndex uint32) (*types.Transaction, error) { - return _IValidatorManager.Contract.CompleteEndValidation(&_IValidatorManager.TransactOpts, messageIndex) -} - -// CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. -// -// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns() -func (_IValidatorManager *IValidatorManagerTransactor) CompleteValidatorRegistration(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { - return _IValidatorManager.contract.Transact(opts, "completeValidatorRegistration", messageIndex) -} - -// CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. -// -// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns() -func (_IValidatorManager *IValidatorManagerSession) CompleteValidatorRegistration(messageIndex uint32) (*types.Transaction, error) { - return _IValidatorManager.Contract.CompleteValidatorRegistration(&_IValidatorManager.TransactOpts, messageIndex) -} - -// CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. -// -// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns() -func (_IValidatorManager *IValidatorManagerTransactorSession) CompleteValidatorRegistration(messageIndex uint32) (*types.Transaction, error) { - return _IValidatorManager.Contract.CompleteValidatorRegistration(&_IValidatorManager.TransactOpts, messageIndex) -} - -// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. -// -// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messsageIndex) returns() -func (_IValidatorManager *IValidatorManagerTransactor) InitializeValidatorSet(opts *bind.TransactOpts, conversionData ConversionData, messsageIndex uint32) (*types.Transaction, error) { - return _IValidatorManager.contract.Transact(opts, "initializeValidatorSet", conversionData, messsageIndex) -} - -// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. -// -// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messsageIndex) returns() -func (_IValidatorManager *IValidatorManagerSession) InitializeValidatorSet(conversionData ConversionData, messsageIndex uint32) (*types.Transaction, error) { - return _IValidatorManager.Contract.InitializeValidatorSet(&_IValidatorManager.TransactOpts, conversionData, messsageIndex) -} - -// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. -// -// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messsageIndex) returns() -func (_IValidatorManager *IValidatorManagerTransactorSession) InitializeValidatorSet(conversionData ConversionData, messsageIndex uint32) (*types.Transaction, error) { - return _IValidatorManager.Contract.InitializeValidatorSet(&_IValidatorManager.TransactOpts, conversionData, messsageIndex) -} - // ResendEndValidatorMessage is a paid mutator transaction binding the contract method 0x0322ed98. // // Solidity: function resendEndValidatorMessage(bytes32 validationID) returns() @@ -299,914 +221,3 @@ func (_IValidatorManager *IValidatorManagerSession) ResendRegisterValidatorMessa func (_IValidatorManager *IValidatorManagerTransactorSession) ResendRegisterValidatorMessage(validationID [32]byte) (*types.Transaction, error) { return _IValidatorManager.Contract.ResendRegisterValidatorMessage(&_IValidatorManager.TransactOpts, validationID) } - -// IValidatorManagerInitialValidatorCreatedIterator is returned from FilterInitialValidatorCreated and is used to iterate over the raw logs and unpacked data for InitialValidatorCreated events raised by the IValidatorManager contract. -type IValidatorManagerInitialValidatorCreatedIterator struct { - Event *IValidatorManagerInitialValidatorCreated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub interfaces.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *IValidatorManagerInitialValidatorCreatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(IValidatorManagerInitialValidatorCreated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(IValidatorManagerInitialValidatorCreated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *IValidatorManagerInitialValidatorCreatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IValidatorManagerInitialValidatorCreatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IValidatorManagerInitialValidatorCreated represents a InitialValidatorCreated event raised by the IValidatorManager contract. -type IValidatorManagerInitialValidatorCreated struct { - ValidationID [32]byte - Weight uint64 - NodeID []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialValidatorCreated is a free log retrieval operation binding the contract event 0xd80a750132c7a4fb67e226bdfecab0d8609bbb4e48cdad62cee218f25b758fff. -// -// Solidity: event InitialValidatorCreated(bytes32 indexed validationID, uint64 weight, bytes nodeID) -func (_IValidatorManager *IValidatorManagerFilterer) FilterInitialValidatorCreated(opts *bind.FilterOpts, validationID [][32]byte) (*IValidatorManagerInitialValidatorCreatedIterator, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - - logs, sub, err := _IValidatorManager.contract.FilterLogs(opts, "InitialValidatorCreated", validationIDRule) - if err != nil { - return nil, err - } - return &IValidatorManagerInitialValidatorCreatedIterator{contract: _IValidatorManager.contract, event: "InitialValidatorCreated", logs: logs, sub: sub}, nil -} - -// WatchInitialValidatorCreated is a free log subscription operation binding the contract event 0xd80a750132c7a4fb67e226bdfecab0d8609bbb4e48cdad62cee218f25b758fff. -// -// Solidity: event InitialValidatorCreated(bytes32 indexed validationID, uint64 weight, bytes nodeID) -func (_IValidatorManager *IValidatorManagerFilterer) WatchInitialValidatorCreated(opts *bind.WatchOpts, sink chan<- *IValidatorManagerInitialValidatorCreated, validationID [][32]byte) (event.Subscription, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - - logs, sub, err := _IValidatorManager.contract.WatchLogs(opts, "InitialValidatorCreated", validationIDRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(IValidatorManagerInitialValidatorCreated) - if err := _IValidatorManager.contract.UnpackLog(event, "InitialValidatorCreated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseInitialValidatorCreated is a log parse operation binding the contract event 0xd80a750132c7a4fb67e226bdfecab0d8609bbb4e48cdad62cee218f25b758fff. -// -// Solidity: event InitialValidatorCreated(bytes32 indexed validationID, uint64 weight, bytes nodeID) -func (_IValidatorManager *IValidatorManagerFilterer) ParseInitialValidatorCreated(log types.Log) (*IValidatorManagerInitialValidatorCreated, error) { - event := new(IValidatorManagerInitialValidatorCreated) - if err := _IValidatorManager.contract.UnpackLog(event, "InitialValidatorCreated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// IValidatorManagerValidationPeriodCreatedIterator is returned from FilterValidationPeriodCreated and is used to iterate over the raw logs and unpacked data for ValidationPeriodCreated events raised by the IValidatorManager contract. -type IValidatorManagerValidationPeriodCreatedIterator struct { - Event *IValidatorManagerValidationPeriodCreated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub interfaces.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *IValidatorManagerValidationPeriodCreatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(IValidatorManagerValidationPeriodCreated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(IValidatorManagerValidationPeriodCreated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *IValidatorManagerValidationPeriodCreatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IValidatorManagerValidationPeriodCreatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IValidatorManagerValidationPeriodCreated represents a ValidationPeriodCreated event raised by the IValidatorManager contract. -type IValidatorManagerValidationPeriodCreated struct { - ValidationID [32]byte - RegisterValidationMessageID [32]byte - Weight uint64 - NodeID []byte - RegistrationExpiry uint64 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterValidationPeriodCreated is a free log retrieval operation binding the contract event 0xe093cab27f3fc60439e008f3a2073310d3ac9ac9b7d59e53a06b2588f7498bd6. -// -// Solidity: event ValidationPeriodCreated(bytes32 indexed validationID, bytes32 indexed registerValidationMessageID, uint64 weight, bytes nodeID, uint64 registrationExpiry) -func (_IValidatorManager *IValidatorManagerFilterer) FilterValidationPeriodCreated(opts *bind.FilterOpts, validationID [][32]byte, registerValidationMessageID [][32]byte) (*IValidatorManagerValidationPeriodCreatedIterator, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var registerValidationMessageIDRule []interface{} - for _, registerValidationMessageIDItem := range registerValidationMessageID { - registerValidationMessageIDRule = append(registerValidationMessageIDRule, registerValidationMessageIDItem) - } - - logs, sub, err := _IValidatorManager.contract.FilterLogs(opts, "ValidationPeriodCreated", validationIDRule, registerValidationMessageIDRule) - if err != nil { - return nil, err - } - return &IValidatorManagerValidationPeriodCreatedIterator{contract: _IValidatorManager.contract, event: "ValidationPeriodCreated", logs: logs, sub: sub}, nil -} - -// WatchValidationPeriodCreated is a free log subscription operation binding the contract event 0xe093cab27f3fc60439e008f3a2073310d3ac9ac9b7d59e53a06b2588f7498bd6. -// -// Solidity: event ValidationPeriodCreated(bytes32 indexed validationID, bytes32 indexed registerValidationMessageID, uint64 weight, bytes nodeID, uint64 registrationExpiry) -func (_IValidatorManager *IValidatorManagerFilterer) WatchValidationPeriodCreated(opts *bind.WatchOpts, sink chan<- *IValidatorManagerValidationPeriodCreated, validationID [][32]byte, registerValidationMessageID [][32]byte) (event.Subscription, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var registerValidationMessageIDRule []interface{} - for _, registerValidationMessageIDItem := range registerValidationMessageID { - registerValidationMessageIDRule = append(registerValidationMessageIDRule, registerValidationMessageIDItem) - } - - logs, sub, err := _IValidatorManager.contract.WatchLogs(opts, "ValidationPeriodCreated", validationIDRule, registerValidationMessageIDRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(IValidatorManagerValidationPeriodCreated) - if err := _IValidatorManager.contract.UnpackLog(event, "ValidationPeriodCreated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseValidationPeriodCreated is a log parse operation binding the contract event 0xe093cab27f3fc60439e008f3a2073310d3ac9ac9b7d59e53a06b2588f7498bd6. -// -// Solidity: event ValidationPeriodCreated(bytes32 indexed validationID, bytes32 indexed registerValidationMessageID, uint64 weight, bytes nodeID, uint64 registrationExpiry) -func (_IValidatorManager *IValidatorManagerFilterer) ParseValidationPeriodCreated(log types.Log) (*IValidatorManagerValidationPeriodCreated, error) { - event := new(IValidatorManagerValidationPeriodCreated) - if err := _IValidatorManager.contract.UnpackLog(event, "ValidationPeriodCreated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// IValidatorManagerValidationPeriodEndedIterator is returned from FilterValidationPeriodEnded and is used to iterate over the raw logs and unpacked data for ValidationPeriodEnded events raised by the IValidatorManager contract. -type IValidatorManagerValidationPeriodEndedIterator struct { - Event *IValidatorManagerValidationPeriodEnded // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub interfaces.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *IValidatorManagerValidationPeriodEndedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(IValidatorManagerValidationPeriodEnded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(IValidatorManagerValidationPeriodEnded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *IValidatorManagerValidationPeriodEndedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IValidatorManagerValidationPeriodEndedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IValidatorManagerValidationPeriodEnded represents a ValidationPeriodEnded event raised by the IValidatorManager contract. -type IValidatorManagerValidationPeriodEnded struct { - ValidationID [32]byte - Status uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterValidationPeriodEnded is a free log retrieval operation binding the contract event 0x1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16. -// -// Solidity: event ValidationPeriodEnded(bytes32 indexed validationID, uint8 indexed status) -func (_IValidatorManager *IValidatorManagerFilterer) FilterValidationPeriodEnded(opts *bind.FilterOpts, validationID [][32]byte, status []uint8) (*IValidatorManagerValidationPeriodEndedIterator, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var statusRule []interface{} - for _, statusItem := range status { - statusRule = append(statusRule, statusItem) - } - - logs, sub, err := _IValidatorManager.contract.FilterLogs(opts, "ValidationPeriodEnded", validationIDRule, statusRule) - if err != nil { - return nil, err - } - return &IValidatorManagerValidationPeriodEndedIterator{contract: _IValidatorManager.contract, event: "ValidationPeriodEnded", logs: logs, sub: sub}, nil -} - -// WatchValidationPeriodEnded is a free log subscription operation binding the contract event 0x1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16. -// -// Solidity: event ValidationPeriodEnded(bytes32 indexed validationID, uint8 indexed status) -func (_IValidatorManager *IValidatorManagerFilterer) WatchValidationPeriodEnded(opts *bind.WatchOpts, sink chan<- *IValidatorManagerValidationPeriodEnded, validationID [][32]byte, status []uint8) (event.Subscription, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var statusRule []interface{} - for _, statusItem := range status { - statusRule = append(statusRule, statusItem) - } - - logs, sub, err := _IValidatorManager.contract.WatchLogs(opts, "ValidationPeriodEnded", validationIDRule, statusRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(IValidatorManagerValidationPeriodEnded) - if err := _IValidatorManager.contract.UnpackLog(event, "ValidationPeriodEnded", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseValidationPeriodEnded is a log parse operation binding the contract event 0x1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16. -// -// Solidity: event ValidationPeriodEnded(bytes32 indexed validationID, uint8 indexed status) -func (_IValidatorManager *IValidatorManagerFilterer) ParseValidationPeriodEnded(log types.Log) (*IValidatorManagerValidationPeriodEnded, error) { - event := new(IValidatorManagerValidationPeriodEnded) - if err := _IValidatorManager.contract.UnpackLog(event, "ValidationPeriodEnded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// IValidatorManagerValidationPeriodRegisteredIterator is returned from FilterValidationPeriodRegistered and is used to iterate over the raw logs and unpacked data for ValidationPeriodRegistered events raised by the IValidatorManager contract. -type IValidatorManagerValidationPeriodRegisteredIterator struct { - Event *IValidatorManagerValidationPeriodRegistered // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub interfaces.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *IValidatorManagerValidationPeriodRegisteredIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(IValidatorManagerValidationPeriodRegistered) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(IValidatorManagerValidationPeriodRegistered) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *IValidatorManagerValidationPeriodRegisteredIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IValidatorManagerValidationPeriodRegisteredIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IValidatorManagerValidationPeriodRegistered represents a ValidationPeriodRegistered event raised by the IValidatorManager contract. -type IValidatorManagerValidationPeriodRegistered struct { - ValidationID [32]byte - Weight uint64 - Timestamp *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterValidationPeriodRegistered is a free log retrieval operation binding the contract event 0x8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b. -// -// Solidity: event ValidationPeriodRegistered(bytes32 indexed validationID, uint64 weight, uint256 timestamp) -func (_IValidatorManager *IValidatorManagerFilterer) FilterValidationPeriodRegistered(opts *bind.FilterOpts, validationID [][32]byte) (*IValidatorManagerValidationPeriodRegisteredIterator, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - - logs, sub, err := _IValidatorManager.contract.FilterLogs(opts, "ValidationPeriodRegistered", validationIDRule) - if err != nil { - return nil, err - } - return &IValidatorManagerValidationPeriodRegisteredIterator{contract: _IValidatorManager.contract, event: "ValidationPeriodRegistered", logs: logs, sub: sub}, nil -} - -// WatchValidationPeriodRegistered is a free log subscription operation binding the contract event 0x8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b. -// -// Solidity: event ValidationPeriodRegistered(bytes32 indexed validationID, uint64 weight, uint256 timestamp) -func (_IValidatorManager *IValidatorManagerFilterer) WatchValidationPeriodRegistered(opts *bind.WatchOpts, sink chan<- *IValidatorManagerValidationPeriodRegistered, validationID [][32]byte) (event.Subscription, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - - logs, sub, err := _IValidatorManager.contract.WatchLogs(opts, "ValidationPeriodRegistered", validationIDRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(IValidatorManagerValidationPeriodRegistered) - if err := _IValidatorManager.contract.UnpackLog(event, "ValidationPeriodRegistered", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseValidationPeriodRegistered is a log parse operation binding the contract event 0x8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b. -// -// Solidity: event ValidationPeriodRegistered(bytes32 indexed validationID, uint64 weight, uint256 timestamp) -func (_IValidatorManager *IValidatorManagerFilterer) ParseValidationPeriodRegistered(log types.Log) (*IValidatorManagerValidationPeriodRegistered, error) { - event := new(IValidatorManagerValidationPeriodRegistered) - if err := _IValidatorManager.contract.UnpackLog(event, "ValidationPeriodRegistered", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// IValidatorManagerValidatorRemovalInitializedIterator is returned from FilterValidatorRemovalInitialized and is used to iterate over the raw logs and unpacked data for ValidatorRemovalInitialized events raised by the IValidatorManager contract. -type IValidatorManagerValidatorRemovalInitializedIterator struct { - Event *IValidatorManagerValidatorRemovalInitialized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub interfaces.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *IValidatorManagerValidatorRemovalInitializedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(IValidatorManagerValidatorRemovalInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(IValidatorManagerValidatorRemovalInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *IValidatorManagerValidatorRemovalInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IValidatorManagerValidatorRemovalInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IValidatorManagerValidatorRemovalInitialized represents a ValidatorRemovalInitialized event raised by the IValidatorManager contract. -type IValidatorManagerValidatorRemovalInitialized struct { - ValidationID [32]byte - SetWeightMessageID [32]byte - Weight uint64 - EndTime *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterValidatorRemovalInitialized is a free log retrieval operation binding the contract event 0xfbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42. -// -// Solidity: event ValidatorRemovalInitialized(bytes32 indexed validationID, bytes32 indexed setWeightMessageID, uint64 weight, uint256 endTime) -func (_IValidatorManager *IValidatorManagerFilterer) FilterValidatorRemovalInitialized(opts *bind.FilterOpts, validationID [][32]byte, setWeightMessageID [][32]byte) (*IValidatorManagerValidatorRemovalInitializedIterator, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var setWeightMessageIDRule []interface{} - for _, setWeightMessageIDItem := range setWeightMessageID { - setWeightMessageIDRule = append(setWeightMessageIDRule, setWeightMessageIDItem) - } - - logs, sub, err := _IValidatorManager.contract.FilterLogs(opts, "ValidatorRemovalInitialized", validationIDRule, setWeightMessageIDRule) - if err != nil { - return nil, err - } - return &IValidatorManagerValidatorRemovalInitializedIterator{contract: _IValidatorManager.contract, event: "ValidatorRemovalInitialized", logs: logs, sub: sub}, nil -} - -// WatchValidatorRemovalInitialized is a free log subscription operation binding the contract event 0xfbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42. -// -// Solidity: event ValidatorRemovalInitialized(bytes32 indexed validationID, bytes32 indexed setWeightMessageID, uint64 weight, uint256 endTime) -func (_IValidatorManager *IValidatorManagerFilterer) WatchValidatorRemovalInitialized(opts *bind.WatchOpts, sink chan<- *IValidatorManagerValidatorRemovalInitialized, validationID [][32]byte, setWeightMessageID [][32]byte) (event.Subscription, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var setWeightMessageIDRule []interface{} - for _, setWeightMessageIDItem := range setWeightMessageID { - setWeightMessageIDRule = append(setWeightMessageIDRule, setWeightMessageIDItem) - } - - logs, sub, err := _IValidatorManager.contract.WatchLogs(opts, "ValidatorRemovalInitialized", validationIDRule, setWeightMessageIDRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(IValidatorManagerValidatorRemovalInitialized) - if err := _IValidatorManager.contract.UnpackLog(event, "ValidatorRemovalInitialized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseValidatorRemovalInitialized is a log parse operation binding the contract event 0xfbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42. -// -// Solidity: event ValidatorRemovalInitialized(bytes32 indexed validationID, bytes32 indexed setWeightMessageID, uint64 weight, uint256 endTime) -func (_IValidatorManager *IValidatorManagerFilterer) ParseValidatorRemovalInitialized(log types.Log) (*IValidatorManagerValidatorRemovalInitialized, error) { - event := new(IValidatorManagerValidatorRemovalInitialized) - if err := _IValidatorManager.contract.UnpackLog(event, "ValidatorRemovalInitialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// IValidatorManagerValidatorWeightUpdateIterator is returned from FilterValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for ValidatorWeightUpdate events raised by the IValidatorManager contract. -type IValidatorManagerValidatorWeightUpdateIterator struct { - Event *IValidatorManagerValidatorWeightUpdate // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub interfaces.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *IValidatorManagerValidatorWeightUpdateIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(IValidatorManagerValidatorWeightUpdate) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(IValidatorManagerValidatorWeightUpdate) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *IValidatorManagerValidatorWeightUpdateIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IValidatorManagerValidatorWeightUpdateIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IValidatorManagerValidatorWeightUpdate represents a ValidatorWeightUpdate event raised by the IValidatorManager contract. -type IValidatorManagerValidatorWeightUpdate struct { - ValidationID [32]byte - Nonce uint64 - Weight uint64 - SetWeightMessageID [32]byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterValidatorWeightUpdate is a free log retrieval operation binding the contract event 0x07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df. -// -// Solidity: event ValidatorWeightUpdate(bytes32 indexed validationID, uint64 indexed nonce, uint64 weight, bytes32 setWeightMessageID) -func (_IValidatorManager *IValidatorManagerFilterer) FilterValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte, nonce []uint64) (*IValidatorManagerValidatorWeightUpdateIterator, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var nonceRule []interface{} - for _, nonceItem := range nonce { - nonceRule = append(nonceRule, nonceItem) - } - - logs, sub, err := _IValidatorManager.contract.FilterLogs(opts, "ValidatorWeightUpdate", validationIDRule, nonceRule) - if err != nil { - return nil, err - } - return &IValidatorManagerValidatorWeightUpdateIterator{contract: _IValidatorManager.contract, event: "ValidatorWeightUpdate", logs: logs, sub: sub}, nil -} - -// WatchValidatorWeightUpdate is a free log subscription operation binding the contract event 0x07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df. -// -// Solidity: event ValidatorWeightUpdate(bytes32 indexed validationID, uint64 indexed nonce, uint64 weight, bytes32 setWeightMessageID) -func (_IValidatorManager *IValidatorManagerFilterer) WatchValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *IValidatorManagerValidatorWeightUpdate, validationID [][32]byte, nonce []uint64) (event.Subscription, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var nonceRule []interface{} - for _, nonceItem := range nonce { - nonceRule = append(nonceRule, nonceItem) - } - - logs, sub, err := _IValidatorManager.contract.WatchLogs(opts, "ValidatorWeightUpdate", validationIDRule, nonceRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(IValidatorManagerValidatorWeightUpdate) - if err := _IValidatorManager.contract.UnpackLog(event, "ValidatorWeightUpdate", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseValidatorWeightUpdate is a log parse operation binding the contract event 0x07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df. -// -// Solidity: event ValidatorWeightUpdate(bytes32 indexed validationID, uint64 indexed nonce, uint64 weight, bytes32 setWeightMessageID) -func (_IValidatorManager *IValidatorManagerFilterer) ParseValidatorWeightUpdate(log types.Log) (*IValidatorManagerValidatorWeightUpdate, error) { - event := new(IValidatorManagerValidatorWeightUpdate) - if err := _IValidatorManager.contract.UnpackLog(event, "ValidatorWeightUpdate", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/contracts/validator-manager/ACP99Manager.sol b/contracts/validator-manager/ACP99Manager.sol new file mode 100644 index 000000000..5288aa4e3 --- /dev/null +++ b/contracts/validator-manager/ACP99Manager.sol @@ -0,0 +1,225 @@ +// (c) 2025, Ava Labs, Inc. All rights reserved. +// See the file LICENSE for licensing terms. + +// SPDX-License-Identifier: Ecosystem + +pragma solidity 0.8.25; + +/** + * @notice Description of the conversion data used to convert + * a subnet to an L1 on the P-Chain. + * This data is the pre-image of a hash that is authenticated by the P-Chain + * and verified by the Validator Manager. + */ +struct ConversionData { + bytes32 subnetID; + bytes32 validatorManagerBlockchainID; + address validatorManagerAddress; + InitialValidator[] initialValidators; +} + +/// @notice Specifies an initial validator, used in the conversion data. +struct InitialValidator { + bytes nodeID; + bytes blsPublicKey; + uint64 weight; +} + +/// @notice L1 validator status. +enum ValidatorStatus { + Unknown, + PendingAdded, + Active, + PendingRemoved, + Completed, + Invalidated +} + +/** + * @notice Specifies the owner of a validator's remaining balance or disable owner on the P-Chain. + * P-Chain addresses are also 20-bytes, so we use the address type to represent them. + */ +struct PChainOwner { + uint32 threshold; + address[] addresses; +} + +/** + * @notice Contains the active state of a Validator. + * @param status The validator status. + * @param nodeID The NodeID of the validator. + * @param startingWeight The weight of the validator at the time of registration. + * @param sentNonce The current weight update nonce sent by the manager. + * @param receivedNonce The highest nonce received from the P-Chain. + * @param weight The current weight of the validator. + * @param startTime The start time of the validator. + * @param endTime The end time of the validator. + */ +struct Validator { + ValidatorStatus status; + bytes nodeID; + uint64 startingWeight; + uint64 sentNonce; + uint64 receivedNonce; + uint64 weight; + uint64 startTime; + uint64 endTime; +} + +// solhint-disable ordering + +/* + * @title ACP99Manager + * @notice The ACP99Manager interface represents the functionality for sovereign L1 + * validator management, as specified in ACP-77. + */ +abstract contract ACP99Manager { + /// @notice Emitted when an initial validator is registered. + event RegisteredInitialValidator( + bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight + ); + /// @notice Emitted when a validator registration to the L1 is initiated. + event InitiatedValidatorRegistration( + bytes32 indexed validationID, + bytes20 indexed nodeID, + bytes32 registrationMessageID, + uint64 registrationExpiry, + uint64 weight + ); + /// @notice Emitted when a validator registration to the L1 is completed. + event CompletedValidatorRegistration(bytes32 indexed validationID, uint64 weight); + /// @notice Emitted when removal of an L1 validator is initiated. + event InitiatedValidatorRemoval( + bytes32 indexed validationID, + bytes32 validatorWeightMessageID, + uint64 weight, + uint64 endTime + ); + /// @notice Emitted when removal of an L1 validator is completed. + event CompletedValidatorRemoval(bytes32 indexed validationID); + /// @notice Emitted when a validator weight update is initiated. + event InitiatedValidatorWeightUpdate( + bytes32 indexed validationID, uint64 nonce, bytes32 weightUpdateMessageID, uint64 weight + ); + /// @notice Emitted when a validator weight update is completed. + event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight); + + /// @notice Returns the SubnetID of the L1 tied to this manager + function subnetID() public view virtual returns (bytes32 id); + + /// @notice Returns the validator details for a given validation ID. + function getValidator(bytes32 validationID) + public + view + virtual + returns (Validator memory validator); + + /// @notice Returns the total weight of the current L1 validator set. + function l1TotalWeight() public view virtual returns (uint64 weight); + + /** + * @notice Verifies and sets the initial validator set for the chain by consuming a + * SubnetToL1ConversionMessage from the P-Chain. + * + * Emits a {RegisteredInitialValidator} event for each initial validator in {conversionData}. + * + * @param conversionData The Subnet conversion message data used to recompute and verify against the ConversionID. + * @param messsageIndex The index that contains the SubnetToL1ConversionMessage ICM message containing the + * ConversionID to be verified against the provided {conversionData}. + */ + function initializeValidatorSet( + ConversionData calldata conversionData, + uint32 messsageIndex + ) public virtual; + + /** + * @notice Initiates validator registration by issuing a RegisterL1ValidatorMessage. The validator should + * not be considered active until completeValidatorRegistration is called. + * + * Emits an {InitiatedValidatorRegistration} event on success. + * + * @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 node on the L1. + * @return validationID The ID of the registered validator. + */ + function _initiateValidatorRegistration( + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, + uint64 weight + ) internal virtual returns (bytes32 validationID); + + /** + * @notice Completes the validator registration process by returning an acknowledgement of the registration of a + * validationID from the P-Chain. The validator should not be considered active until this method is successfully called. + * + * Emits a {CompletedValidatorRegistration} event on success. + * + * @param messageIndex The index of the L1ValidatorRegistrationMessage to be received providing the acknowledgement. + * @return validationID The ID of the registered validator. + */ + function completeValidatorRegistration(uint32 messageIndex) + public + virtual + returns (bytes32 validationID); + + /** + * @notice Initiates validator removal by issuing a L1ValidatorWeightMessage with the weight set to zero. + * The validator should be considered inactive as soon as this function is called. + * + * Emits an {InitiatedValidatorRemoval} on success. + * + * @param validationID The ID of the validator to remove. + */ + function _initiateValidatorRemoval(bytes32 validationID) internal virtual; + + /** + * @notice Completes validator removal by consuming an RegisterL1ValidatorMessage from the P-Chain acknowledging + * that the validator has been removed. + * + * Emits a {CompletedValidatorRemoval} on success. + * + * @param messageIndex The index of the RegisterL1ValidatorMessage. + */ + function completeValidatorRemoval(uint32 messageIndex) + public + virtual + returns (bytes32 validationID); + + /** + * @notice Initiates a validator weight update by issuing an L1ValidatorWeightMessage with a nonzero weight. + * The validator weight change should not have any effect until completeValidatorWeightUpdate is successfully called. + * + * Emits an {InitiatedValidatorWeightUpdate} event on success. + * + * @param validationID The ID of the validator to modify. + * @param weight The new weight of the validator. + * @return nonce The validator nonce associated with the weight change. + * @return messageID The ID of the L1ValidatorWeightMessage used to update the validator's weight. + */ + function _initiateValidatorWeightUpdate( + bytes32 validationID, + uint64 weight + ) internal virtual returns (uint64 nonce, bytes32 messageID); + + /** + * @notice Completes the validator weight update process by consuming an L1ValidatorWeightMessage from the P-Chain + * acknowledging the weight update. The validator weight change should not have any effect until this method is successfully called. + * + * Emits a {CompletedValidatorWeightUpdate} event on success. + * + * @param messageIndex The index of the L1ValidatorWeightMessage message to be received providing the acknowledgement. + * @return validationID The ID of the validator, retreived from the L1ValidatorWeightMessage. + * @return nonce The nonce of the validator, retreived from the L1ValidatorWeightMessage. + */ + function completeValidatorWeightUpdate(uint32 messageIndex) + public + virtual + returns (bytes32 validationID, uint64 nonce); +} diff --git a/contracts/validator-manager/ExampleRewardCalculator.sol b/contracts/validator-manager/ExampleRewardCalculator.sol index 856158350..7ef351e62 100644 --- a/contracts/validator-manager/ExampleRewardCalculator.sol +++ b/contracts/validator-manager/ExampleRewardCalculator.sol @@ -31,7 +31,7 @@ contract ExampleRewardCalculator is IRewardCalculator { uint64 stakingEndTime, uint64 uptimeSeconds ) external view returns (uint256) { - // Equivalent to uptimeSeconds/(validator.endedAt - validator.startedAt) < UPTIME_REWARDS_THRESHOLD_PERCENTAGE/100 + // Equivalent to uptimeSeconds/(validator.endTime - validator.startTime) < UPTIME_REWARDS_THRESHOLD_PERCENTAGE/100 // Rearranged to prevent integer division truncation. if ( uptimeSeconds * 100 diff --git a/contracts/validator-manager/PoAValidatorManager.sol b/contracts/validator-manager/PoAValidatorManager.sol index b62a30557..2f6ffa823 100644 --- a/contracts/validator-manager/PoAValidatorManager.sol +++ b/contracts/validator-manager/PoAValidatorManager.sol @@ -55,7 +55,14 @@ contract PoAValidatorManager is IPoAValidatorManager, ValidatorManager, OwnableU ValidatorRegistrationInput calldata registrationInput, uint64 weight ) external onlyOwner returns (bytes32 validationID) { - return _initializeValidatorRegistration(registrationInput, weight); + return _initiateValidatorRegistration({ + nodeID: registrationInput.nodeID, + blsPublicKey: registrationInput.blsPublicKey, + registrationExpiry: registrationInput.registrationExpiry, + remainingBalanceOwner: registrationInput.remainingBalanceOwner, + disableOwner: registrationInput.disableOwner, + weight: weight + }); } // solhint-enable ordering @@ -63,13 +70,19 @@ contract PoAValidatorManager is IPoAValidatorManager, ValidatorManager, OwnableU * @notice See {IPoAValidatorManager-initializeEndValidation}. */ function initializeEndValidation(bytes32 validationID) external override onlyOwner { - _initializeEndValidation(validationID); + _initiateValidatorRemoval(validationID); } /** - * @notice See {IValidatorManager-completeEndValidation}. + * @notice See {ACP99Manager-completeValidatorRemoval}. */ - function completeEndValidation(uint32 messageIndex) external { - _completeEndValidation(messageIndex); + function completeValidatorRemoval(uint32 messageIndex) + public + virtual + override + returns (bytes32) + { + (bytes32 validationID,) = _completeEndValidation(messageIndex); + return validationID; } } diff --git a/contracts/validator-manager/PoSValidatorManager.sol b/contracts/validator-manager/PoSValidatorManager.sol index 22ebc6120..36d28768d 100644 --- a/contracts/validator-manager/PoSValidatorManager.sol +++ b/contracts/validator-manager/PoSValidatorManager.sol @@ -14,11 +14,8 @@ import { PoSValidatorInfo, PoSValidatorManagerSettings } from "./interfaces/IPoSValidatorManager.sol"; -import { - Validator, - ValidatorRegistrationInput, - ValidatorStatus -} from "./interfaces/IValidatorManager.sol"; +import {ValidatorRegistrationInput} from "./interfaces/IValidatorManager.sol"; +import {Validator, ValidatorStatus} from "./ACP99Manager.sol"; import {IRewardCalculator} from "./interfaces/IRewardCalculator.sol"; import {WarpMessage} from "@avalabs/subnet-evm-contracts@1.2.0/contracts/interfaces/IWarpMessenger.sol"; @@ -85,7 +82,6 @@ abstract contract PoSValidatorManager is error InvalidDelegationFee(uint16 delegationFeeBips); error InvalidDelegationID(bytes32 delegationID); error InvalidDelegatorStatus(DelegatorStatus status); - error InvalidNonce(uint64 nonce); error InvalidRewardRecipient(address rewardRecipient); error InvalidStakeAmount(uint256 stakeAmount); error InvalidMinStakeDuration(uint64 minStakeDuration); @@ -327,7 +323,11 @@ abstract contract PoSValidatorManager is ) internal returns (bool) { PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); - Validator memory validator = _initializeEndValidation(validationID); + _initiateValidatorRemoval(validationID); + + // The validator must be fetched after the removal has been initiated, since the above call modifies + // the validator's state. + Validator memory validator = getValidator(validationID); // Non-PoS validators are required to boostrap the network, but are not eligible for rewards. if (!_isPoSValidator(validationID)) { @@ -341,10 +341,10 @@ abstract contract PoSValidatorManager is // Check that minimum stake duration has passed. if ( - validator.endedAt - < validator.startedAt + $._posValidatorInfo[validationID].minStakeDuration + validator.endTime + < validator.startTime + $._posValidatorInfo[validationID].minStakeDuration ) { - revert MinStakeDurationNotPassed(validator.endedAt); + revert MinStakeDurationNotPassed(validator.endTime); } // Uptime proofs include the absolute number of seconds the validator has been active. @@ -357,9 +357,9 @@ abstract contract PoSValidatorManager is uint256 reward = $._rewardCalculator.calculateReward({ stakeAmount: weightToValue(validator.startingWeight), - validatorStartTime: validator.startedAt, - stakingStartTime: validator.startedAt, - stakingEndTime: validator.endedAt, + validatorStartTime: validator.startTime, + stakingStartTime: validator.startTime, + stakingEndTime: validator.endTime, uptimeSeconds: uptimeSeconds }); @@ -374,9 +374,15 @@ abstract contract PoSValidatorManager is } /** - * @notice See {IValidatorManager-completeEndValidation}. + * @notice See {ACP99Manager-completeValidatorRemoval}. */ - function completeEndValidation(uint32 messageIndex) external nonReentrant { + function completeValidatorRemoval(uint32 messageIndex) + public + virtual + override + nonReentrant + returns (bytes32) + { PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); (bytes32 validationID, Validator memory validator) = _completeEndValidation(messageIndex); @@ -384,7 +390,7 @@ abstract contract PoSValidatorManager is // 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. if (!_isPoSValidator(validationID)) { - return; + return validationID; } address owner = $._posValidatorInfo[validationID].owner; @@ -403,6 +409,8 @@ abstract contract PoSValidatorManager is // The stake is unlocked whether the validation period is completed or invalidated. _unlock(owner, weightToValue(validator.startingWeight)); + + return validationID; } /** @@ -434,7 +442,7 @@ abstract contract PoSValidatorManager is (bytes32 uptimeValidationID, uint64 uptime) = ValidatorMessages.unpackValidationUptimeMessage(warpMessage.payload); if (validationID != uptimeValidationID) { - revert InvalidValidationID(validationID); + revert UnexpectedValidationID(uptimeValidationID, validationID); } if (uptime > $._posValidatorInfo[validationID].uptimeSeconds) { @@ -475,7 +483,14 @@ abstract contract PoSValidatorManager is uint256 lockedValue = _lock(stakeAmount); uint64 weight = valueToWeight(lockedValue); - bytes32 validationID = _initializeValidatorRegistration(registrationInput, weight); + bytes32 validationID = _initiateValidatorRegistration({ + nodeID: registrationInput.nodeID, + blsPublicKey: registrationInput.blsPublicKey, + registrationExpiry: registrationInput.registrationExpiry, + remainingBalanceOwner: registrationInput.remainingBalanceOwner, + disableOwner: registrationInput.disableOwner, + weight: weight + }); address owner = _msgSender(); @@ -545,7 +560,8 @@ abstract contract PoSValidatorManager is revert MaxWeightExceeded(newValidatorWeight); } - (uint64 nonce, bytes32 messageID) = _setValidatorWeight(validationID, newValidatorWeight); + (uint64 nonce, bytes32 messageID) = + _initiateValidatorWeightUpdate(validationID, newValidatorWeight); bytes32 delegationID = keccak256(abi.encodePacked(validationID, nonce)); @@ -556,7 +572,7 @@ abstract contract PoSValidatorManager is $._delegatorStakes[delegationID].owner = delegatorAddress; $._delegatorStakes[delegationID].validationID = validationID; $._delegatorStakes[delegationID].weight = weight; - $._delegatorStakes[delegationID].startedAt = 0; + $._delegatorStakes[delegationID].startTime = 0; $._delegatorStakes[delegationID].startingNonce = nonce; $._delegatorStakes[delegationID].endingNonce = 0; @@ -595,25 +611,23 @@ abstract contract PoSValidatorManager is return _completeEndDelegation(delegationID); } - // Unpack the Warp message - (bytes32 messageValidationID, uint64 nonce,) = ValidatorMessages - .unpackL1ValidatorWeightMessage(_getPChainWarpMessage(messageIndex).payload); - - if (validationID != messageValidationID) { - revert InvalidValidationID(delegator.validationID); - } + // If we've already received a weight update with a nonce greater than the delegation's starting nonce, + // then there's no requirement to include an ICM message in this function call. + if (validator.receivedNonce < delegator.startingNonce) { + (bytes32 messageValidationID, uint64 nonce) = + completeValidatorWeightUpdate(messageIndex); - // The received nonce should be no greater than the highest sent nonce, and at least as high as - // the delegation's starting nonce. This allows a weight update using a higher nonce - // (which implicitly includes the delegation's weight update) to be used to complete delisting - // for an earlier delegation. This is necessary because the P-Chain is only willing to sign the latest weight update. - if (validator.messageNonce < nonce || delegator.startingNonce > nonce) { - revert InvalidNonce(nonce); + if (validationID != messageValidationID) { + revert UnexpectedValidationID(messageValidationID, validationID); + } + if (nonce < delegator.startingNonce) { + revert InvalidNonce(nonce); + } } // Update the delegation status $._delegatorStakes[delegationID].status = DelegatorStatus.Active; - $._delegatorStakes[delegationID].startedAt = uint64(block.timestamp); + $._delegatorStakes[delegationID].startTime = uint64(block.timestamp); emit DelegatorRegistered({ delegationID: delegationID, @@ -720,7 +734,7 @@ abstract contract PoSValidatorManager is if ( block.timestamp - < validator.startedAt + $._posValidatorInfo[validationID].minStakeDuration + < validator.startTime + $._posValidatorInfo[validationID].minStakeDuration ) { revert MinStakeDurationNotPassed(uint64(block.timestamp)); } @@ -728,7 +742,7 @@ abstract contract PoSValidatorManager is if (validator.status == ValidatorStatus.Active) { // Check that minimum stake duration has passed. - if (block.timestamp < delegator.startedAt + $._minimumStakeDuration) { + if (block.timestamp < delegator.startTime + $._minimumStakeDuration) { revert MinStakeDurationNotPassed(uint64(block.timestamp)); } @@ -743,7 +757,7 @@ abstract contract PoSValidatorManager is $._delegatorStakes[delegationID].status = DelegatorStatus.PendingRemoved; ($._delegatorStakes[delegationID].endingNonce,) = - _setValidatorWeight(validationID, validator.weight - delegator.weight); + _initiateValidatorWeightUpdate(validationID, validator.weight - delegator.weight); uint256 reward = _calculateAndSetDelegationReward(delegator, rewardRecipient, delegationID); @@ -780,7 +794,7 @@ abstract contract PoSValidatorManager is validator.status == ValidatorStatus.PendingRemoved || validator.status == ValidatorStatus.Completed ) { - delegationEndTime = validator.endedAt; + delegationEndTime = validator.endTime; } else if (validator.status == ValidatorStatus.Active) { delegationEndTime = uint64(block.timestamp); } else { @@ -789,14 +803,14 @@ abstract contract PoSValidatorManager is } // Only give rewards in the case that the delegation started before the validator exited. - if (delegationEndTime <= delegator.startedAt) { + if (delegationEndTime <= delegator.startTime) { return 0; } uint256 reward = $._rewardCalculator.calculateReward({ stakeAmount: weightToValue(delegator.weight), - validatorStartTime: validator.startedAt, - stakingStartTime: delegator.startedAt, + validatorStartTime: validator.startTime, + stakingStartTime: delegator.startTime, stakingEndTime: delegationEndTime, uptimeSeconds: $._posValidatorInfo[delegator.validationID].uptimeSeconds }); @@ -827,7 +841,7 @@ abstract contract PoSValidatorManager is } Validator memory validator = getValidator(delegator.validationID); - if (validator.messageNonce == 0) { + if (validator.sentNonce == 0) { // Should be unreachable. revert InvalidDelegationID(delegationID); } @@ -835,7 +849,7 @@ abstract contract PoSValidatorManager is // Submit the message to the Warp precompile. WARP_MESSENGER.sendWarpMessage( ValidatorMessages.packL1ValidatorWeightMessage( - delegator.validationID, validator.messageNonce, validator.weight + delegator.validationID, validator.sentNonce, validator.weight ) ); } @@ -856,15 +870,16 @@ abstract contract PoSValidatorManager is if (delegator.status != DelegatorStatus.PendingRemoved) { revert InvalidDelegatorStatus(delegator.status); } + Validator memory validator = getValidator(delegator.validationID); - if (getValidator(delegator.validationID).status != ValidatorStatus.Completed) { - // Unpack the Warp message - WarpMessage memory warpMessage = _getPChainWarpMessage(messageIndex); - (bytes32 validationID, uint64 nonce,) = - ValidatorMessages.unpackL1ValidatorWeightMessage(warpMessage.payload); - + // We only expect an ICM message if we haven't received a weight update with a nonce greater than the delegation's ending nonce + if ( + getValidator(delegator.validationID).status != ValidatorStatus.Completed + && validator.receivedNonce < delegator.endingNonce + ) { + (bytes32 validationID, uint64 nonce) = completeValidatorWeightUpdate(messageIndex); if (delegator.validationID != validationID) { - revert InvalidValidationID(validationID); + revert UnexpectedValidationID(validationID, delegator.validationID); } // The received nonce should be at least as high as the delegation's ending nonce. This allows a weight @@ -887,7 +902,7 @@ abstract contract PoSValidatorManager is // To prevent churn tracker abuse, check that one full churn period has passed, // so a delegator may not stake twice in the same churn period. - if (block.timestamp < delegator.startedAt + _getChurnPeriodSeconds()) { + if (block.timestamp < delegator.startTime + _getChurnPeriodSeconds()) { revert MinStakeDurationNotPassed(uint64(block.timestamp)); } diff --git a/contracts/validator-manager/README.md b/contracts/validator-manager/README.md index 6ab93bae6..ebd794a20 100644 --- a/contracts/validator-manager/README.md +++ b/contracts/validator-manager/README.md @@ -1,36 +1,45 @@ -# Validator Manager Contract +# Validator Manager Contracts -The contracts in this directory define the Validator Manager used to manage Avalanche L1 validators, as defined in [ACP-77](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets). `ValidatorManager.sol` is the top-level abstract contract that provides the basic functionality. The other contracts are related as follows: +The contracts in this directory define the Validator Manager used to manage Avalanche L1 validators, as defined in [ACP-77](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets). They comply with [ACP-99](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/99-validatorsetmanager-contract), which specifies the standard minimal functionality that Validator Managers should implement. The contracts in this directory are are related as follows: ```mermaid classDiagram -class ValidatorManager { - initializeValidatorSet() - completeValidatorRegistration() - completeEndValidation() - +class ACP99Manager { + +initializeValidatorSet() + +completeValidatorRegistration() + +completeValidatorRemoval() + +completeValidatorWeightUpdate() + -_initiateValidatorRegistration() + -_initiateValidatorRemoval() + -_initiateValidatorWeightUpdate() } +<> ACP99Manager + +class ValidatorManager <> ValidatorManager +note for ValidatorManager "Implements most of ACP99Manager" + class PoSValidatorManager { - initializeEndValidation() - completeDelegatorRegistration() - initializeEndDelegation() - completeEndDelegation() + +initializeEndValidation() + +completeDelegatorRegistration() + +initializeEndDelegation() + +completeEndDelegation() } <> PoSValidatorManager class ERC20TokenStakingManager { - initializeValidatorRegistration() - initializeDelegatorRegistration() + +initializeValidatorRegistration() + +initializeDelegatorRegistration() } class NativeTokenStakingManager { - initializeValidatorRegistration() payable - initializeDelegatorRegistration() payable + +initializeValidatorRegistration() payable + +initializeDelegatorRegistration() payable } class PoAValidatorManager { - initializeValidatorRegistration() - initializeEndValidation() + +initializeValidatorRegistration() + +initializeEndValidation() } +ACP99Manager <|-- ValidatorManager ValidatorManager <|-- PoSValidatorManager ValidatorManager <|-- PoAValidatorManager PoSValidatorManager <|-- ERC20TokenStakingManager diff --git a/contracts/validator-manager/ValidatorManager.sol b/contracts/validator-manager/ValidatorManager.sol index 5a504549f..33d232b20 100644 --- a/contracts/validator-manager/ValidatorManager.sol +++ b/contracts/validator-manager/ValidatorManager.sol @@ -7,16 +7,18 @@ pragma solidity 0.8.25; import {ValidatorMessages} from "./ValidatorMessages.sol"; import { - InitialValidator, IValidatorManager, + ValidatorChurnPeriod, + ValidatorManagerSettings +} from "./interfaces/IValidatorManager.sol"; +import { + ACP99Manager, + InitialValidator, PChainOwner, ConversionData, Validator, - ValidatorChurnPeriod, - ValidatorManagerSettings, - ValidatorRegistrationInput, ValidatorStatus -} from "./interfaces/IValidatorManager.sol"; +} from "./ACP99Manager.sol"; import { IWarpMessenger, WarpMessage @@ -27,11 +29,16 @@ import {Initializable} from "@openzeppelin/contracts-upgradeable@5.0.2/proxy/utils/Initializable.sol"; /** - * @dev Implementation of the {IValidatorManager} interface. + * @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 { +abstract contract ValidatorManager is + Initializable, + ContextUpgradeable, + IValidatorManager, + ACP99Manager +{ // solhint-disable private-vars-leading-underscore /// @custom:storage-location erc7201:avalanche-icm.storage.ValidatorManager @@ -62,6 +69,7 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida uint8 public constant MAXIMUM_CHURN_PERCENTAGE_LIMIT = 20; uint64 public constant MAXIMUM_REGISTRATION_EXPIRY_LENGTH = 2 days; uint32 public constant ADDRESS_LENGTH = 20; // This is only used as a packed uint32 + uint32 public constant NODE_ID_LENGTH = 20; uint8 public constant BLS_PUBLIC_KEY_LENGTH = 48; bytes32 public constant P_CHAIN_BLOCKCHAIN_ID = bytes32(0); @@ -76,8 +84,10 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida error InvalidNodeID(bytes nodeID); error InvalidConversionID(bytes32 encodedConversionID, bytes32 expectedConversionID); error InvalidTotalWeight(uint64 weight); + error UnexpectedValidationID(bytes32 validationID, bytes32 expectedValidationID); error InvalidValidationID(bytes32 validationID); error InvalidValidatorStatus(ValidatorStatus status); + error InvalidNonce(uint64 nonce); error InvalidWarpMessage(); error MaxChurnRateExceeded(uint64 churnAmount); error NodeAlreadyRegistered(bytes nodeID); @@ -144,12 +154,12 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida } /** - * @notice See {IValidatorManager-initializeValidatorSet}. + * @notice See {ACP99Manager-initializeValidatorSet}. */ function initializeValidatorSet( ConversionData calldata conversionData, uint32 messageIndex - ) external { + ) public virtual override { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); if ($._initializedValidatorSet) { revert InvalidInitializationStatus(); @@ -171,25 +181,27 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida if ($._registeredValidators[initialValidator.nodeID] != bytes32(0)) { revert NodeAlreadyRegistered(initialValidator.nodeID); } + if (initialValidator.nodeID.length != NODE_ID_LENGTH) { + revert InvalidNodeID(initialValidator.nodeID); + } // Validation ID of the initial validators is the sha256 hash of the // convert subnet to L1 tx ID and the index of the initial validator. bytes32 validationID = sha256(abi.encodePacked(conversionData.subnetID, i)); // Save the initial validator as an active validator. - $._registeredValidators[initialValidator.nodeID] = validationID; $._validationPeriods[validationID].status = ValidatorStatus.Active; $._validationPeriods[validationID].nodeID = initialValidator.nodeID; $._validationPeriods[validationID].startingWeight = initialValidator.weight; - $._validationPeriods[validationID].messageNonce = 0; + $._validationPeriods[validationID].sentNonce = 0; $._validationPeriods[validationID].weight = initialValidator.weight; - $._validationPeriods[validationID].startedAt = uint64(block.timestamp); - $._validationPeriods[validationID].endedAt = 0; + $._validationPeriods[validationID].startTime = uint64(block.timestamp); + $._validationPeriods[validationID].endTime = 0; totalWeight += initialValidator.weight; - emit InitialValidatorCreated( - validationID, initialValidator.weight, initialValidator.nodeID + emit RegisteredInitialValidator( + validationID, _fixedNodeID(initialValidator.nodeID), initialValidator.weight ); } $._churnTracker.totalWeight = totalWeight; @@ -213,7 +225,7 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida $._initializedValidatorSet = true; } - function _validatePChainOwner(PChainOwner calldata pChainOwner) internal pure { + function _validatePChainOwner(PChainOwner memory pChainOwner) internal pure { // If threshold is 0, addresses must be empty. if (pChainOwner.threshold == 0 && pChainOwner.addresses.length != 0) { revert InvalidPChainOwnerThreshold(pChainOwner.threshold, pChainOwner.addresses.length); @@ -232,23 +244,24 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida } /** - * @notice Begins the validator registration process, and sets the initial weight for the validator. - * This is the only method related to validator registration and removal that needs the initializedValidatorSet - * modifier. All others are guarded by checking the validator status changes initialized in this function. - * @param input The inputs for a validator registration. - * @param weight The weight of the validator being registered. + * @notice See {ACP99Manager-_initiateValidatorRegistration}. + * @dev This function modifies the validator's state. Callers should ensure that any references are updated. */ - function _initializeValidatorRegistration( - ValidatorRegistrationInput calldata input, + function _initiateValidatorRegistration( + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, uint64 weight - ) internal virtual initializedValidatorSet returns (bytes32) { + ) internal virtual override initializedValidatorSet returns (bytes32) { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); if ( - input.registrationExpiry <= block.timestamp - || input.registrationExpiry >= block.timestamp + MAXIMUM_REGISTRATION_EXPIRY_LENGTH + registrationExpiry <= block.timestamp + || registrationExpiry >= block.timestamp + MAXIMUM_REGISTRATION_EXPIRY_LENGTH ) { - revert InvalidRegistrationExpiry(input.registrationExpiry); + revert InvalidRegistrationExpiry(registrationExpiry); } // Ensure the new validator doesn't overflow the total weight @@ -256,19 +269,19 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida revert InvalidTotalWeight(weight); } - _validatePChainOwner(input.remainingBalanceOwner); - _validatePChainOwner(input.disableOwner); + _validatePChainOwner(remainingBalanceOwner); + _validatePChainOwner(disableOwner); // Ensure the nodeID is not the zero address, and is not already an active validator. - if (input.blsPublicKey.length != BLS_PUBLIC_KEY_LENGTH) { - revert InvalidBLSKeyLength(input.blsPublicKey.length); + if (blsPublicKey.length != BLS_PUBLIC_KEY_LENGTH) { + revert InvalidBLSKeyLength(blsPublicKey.length); } - if (input.nodeID.length == 0) { - revert InvalidNodeID(input.nodeID); + if (nodeID.length != NODE_ID_LENGTH) { + revert InvalidNodeID(nodeID); } - if ($._registeredValidators[input.nodeID] != bytes32(0)) { - revert NodeAlreadyRegistered(input.nodeID); + if ($._registeredValidators[nodeID] != bytes32(0)) { + revert NodeAlreadyRegistered(nodeID); } // Check that adding this validator would not exceed the maximum churn rate. @@ -278,29 +291,29 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida .packRegisterL1ValidatorMessage( ValidatorMessages.ValidationPeriod({ subnetID: $._subnetID, - nodeID: input.nodeID, - blsPublicKey: input.blsPublicKey, - remainingBalanceOwner: input.remainingBalanceOwner, - disableOwner: input.disableOwner, - registrationExpiry: input.registrationExpiry, + nodeID: nodeID, + blsPublicKey: blsPublicKey, + remainingBalanceOwner: remainingBalanceOwner, + disableOwner: disableOwner, + registrationExpiry: registrationExpiry, weight: weight }) ); $._pendingRegisterValidationMessages[validationID] = registerL1ValidatorMessage; - $._registeredValidators[input.nodeID] = validationID; + $._registeredValidators[nodeID] = validationID; // Submit the message to the Warp precompile. bytes32 messageID = WARP_MESSENGER.sendWarpMessage(registerL1ValidatorMessage); $._validationPeriods[validationID].status = ValidatorStatus.PendingAdded; - $._validationPeriods[validationID].nodeID = input.nodeID; + $._validationPeriods[validationID].nodeID = nodeID; $._validationPeriods[validationID].startingWeight = weight; - $._validationPeriods[validationID].messageNonce = 0; + $._validationPeriods[validationID].sentNonce = 0; $._validationPeriods[validationID].weight = weight; - $._validationPeriods[validationID].startedAt = 0; // The validation period only starts once the registration is acknowledged. - $._validationPeriods[validationID].endedAt = 0; + $._validationPeriods[validationID].startTime = 0; // The validation period only starts once the registration is acknowledged. + $._validationPeriods[validationID].endTime = 0; - emit ValidationPeriodCreated( - validationID, messageID, weight, input.nodeID, input.registrationExpiry + emit InitiatedValidatorRegistration( + validationID, _fixedNodeID(nodeID), messageID, registrationExpiry, weight ); return validationID; @@ -324,9 +337,14 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida } /** - * @notice See {IValidatorManager-completeValidatorRegistration}. + * @notice See {ACP99Manager-completeValidatorRegistration}. */ - function completeValidatorRegistration(uint32 messageIndex) external { + function completeValidatorRegistration(uint32 messageIndex) + public + virtual + override + returns (bytes32) + { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); (bytes32 validationID, bool validRegistration) = ValidatorMessages .unpackL1ValidatorRegistrationMessage(_getPChainWarpMessage(messageIndex).payload); @@ -344,10 +362,10 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida delete $._pendingRegisterValidationMessages[validationID]; $._validationPeriods[validationID].status = ValidatorStatus.Active; - $._validationPeriods[validationID].startedAt = uint64(block.timestamp); - emit ValidationPeriodRegistered( - validationID, $._validationPeriods[validationID].weight, block.timestamp - ); + $._validationPeriods[validationID].startTime = uint64(block.timestamp); + emit CompletedValidatorRegistration(validationID, $._validationPeriods[validationID].weight); + + return validationID; } /** @@ -360,25 +378,66 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida } /** - * @notice Returns a validator registered to the given validationID - * @param validationID ID of the validation period associated with the validator + * @notice See {ACP99Manager-getValidator}. */ - function getValidator(bytes32 validationID) public view returns (Validator memory) { + function getValidator(bytes32 validationID) + public + view + virtual + override + returns (Validator memory) + { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); return $._validationPeriods[validationID]; } /** - * @notice Begins the process of ending an active validation period. The validation period must have been previously - * started by a successful call to {completeValidatorRegistration} with the given validationID. - * Any rewards for this validation period will stop accruing when this function is called. - * @param validationID The ID of the validation period being ended. + * @notice See {ACP99Manager-l1TotalWeight}. */ - function _initializeEndValidation(bytes32 validationID) - internal + function l1TotalWeight() public view virtual override returns (uint64) { + return _getValidatorManagerStorage()._churnTracker.totalWeight; + } + + /** + * @notice See {ACP99Manager-subnetID}. + */ + function subnetID() public view virtual override returns (bytes32) { + return _getValidatorManagerStorage()._subnetID; + } + + /** + * @notice See {ACP99Manager-completeValidatorWeightUpdate}. + */ + function completeValidatorWeightUpdate(uint32 messageIndex) + public virtual - returns (Validator memory) + override + returns (bytes32, uint64) { + WarpMessage memory warpMessage = _getPChainWarpMessage(messageIndex); + (bytes32 validationID, uint64 nonce, uint64 weight) = + ValidatorMessages.unpackL1ValidatorWeightMessage(warpMessage.payload); + + ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); + + // The received nonce should be no greater than the highest sent nonce to ensure + // that weight changes are only initiated by this contract. + if ($._validationPeriods[validationID].sentNonce < nonce) { + revert InvalidNonce(nonce); + } + + $._validationPeriods[validationID].receivedNonce = nonce; + + emit CompletedValidatorWeightUpdate(validationID, nonce, weight); + + return (validationID, nonce); + } + + /** + * @notice See {ACP99Manager-_initiateValidatorRemoval}. + * @dev This function modifies the validator's state. Callers should ensure that any references are updated. + */ + function _initiateValidatorRemoval(bytes32 validationID) internal virtual override { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); // Ensure the validation period is active. @@ -394,17 +453,17 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida // Set the end time of the validation period, since it is no longer known to be an active validator // on the P-Chain. - validator.endedAt = uint64(block.timestamp); + validator.endTime = uint64(block.timestamp); // Save the validator updates. $._validationPeriods[validationID] = validator; - (, bytes32 messageID) = _setValidatorWeight(validationID, 0); + (, bytes32 messageID) = _initiateValidatorWeightUpdate(validationID, 0); // Emit the event to signal the start of the validator removal process. - emit ValidatorRemovalInitialized(validationID, messageID, validator.weight, block.timestamp); - - return validator; + emit InitiatedValidatorRemoval( + validationID, messageID, validator.weight, uint64(block.timestamp) + ); } /** @@ -420,7 +479,7 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida } WARP_MESSENGER.sendWarpMessage( - ValidatorMessages.packL1ValidatorWeightMessage(validationID, validator.messageNonce, 0) + ValidatorMessages.packL1ValidatorWeightMessage(validationID, validator.sentNonce, 0) ); } @@ -469,14 +528,14 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida $._validationPeriods[validationID] = validator; // Emit event. - emit ValidationPeriodEnded(validationID, validator.status); + emit CompletedValidatorRemoval(validationID); return (validationID, validator); } - function _incrementAndGetNonce(bytes32 validationID) internal returns (uint64) { + function _incrementSentNonce(bytes32 validationID) internal returns (uint64) { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); - return ++$._validationPeriods[validationID].messageNonce; + return ++$._validationPeriods[validationID].sentNonce; } function _getPChainWarpMessage(uint32 messageIndex) @@ -500,17 +559,21 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida return warpMessage; } - function _setValidatorWeight( + /** + * @notice See {ACP99Manager-_initiateValidatorWeightUpdate}. + * @dev This function modifies the validator's state. Callers should ensure that any references are updated. + */ + function _initiateValidatorWeightUpdate( bytes32 validationID, uint64 newWeight - ) internal returns (uint64, bytes32) { + ) internal virtual override returns (uint64, bytes32) { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); uint64 validatorWeight = $._validationPeriods[validationID].weight; // Check that changing the validator weight would not exceed the maximum churn rate. _checkAndUpdateChurnTracker(newWeight, validatorWeight); - uint64 nonce = _incrementAndGetNonce(validationID); + uint64 nonce = _incrementSentNonce(validationID); $._validationPeriods[validationID].weight = newWeight; @@ -519,11 +582,11 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida ValidatorMessages.packL1ValidatorWeightMessage(validationID, nonce, newWeight) ); - emit ValidatorWeightUpdate({ + emit InitiatedValidatorWeightUpdate({ validationID: validationID, nonce: nonce, - weight: newWeight, - setWeightMessageID: messageID + weightUpdateMessageID: messageID, + weight: newWeight }); return (nonce, messageID); @@ -555,11 +618,11 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida ValidatorChurnPeriod memory churnTracker = $._churnTracker; if ( - churnTracker.startedAt == 0 - || currentTime >= churnTracker.startedAt + $._churnPeriodSeconds + churnTracker.startTime == 0 + || currentTime >= churnTracker.startTime + $._churnPeriodSeconds ) { churnTracker.churnAmount = weightChange; - churnTracker.startedAt = currentTime; + churnTracker.startTime = currentTime; churnTracker.initialWeight = churnTracker.totalWeight; } else { // Churn is always additive whether the weight is being added or removed. @@ -584,4 +647,18 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida $._churnTracker = churnTracker; } + + /** + * @notice Converts a nodeID to a fixed length of 20 bytes. + * @param nodeID The nodeID to convert. + * @return The fixed length nodeID. + */ + function _fixedNodeID(bytes memory nodeID) private pure returns (bytes20) { + bytes20 fixedID; + // solhint-disable-next-line no-inline-assembly + assembly { + fixedID := mload(add(nodeID, 32)) + } + return fixedID; + } } diff --git a/contracts/validator-manager/ValidatorMessages.sol b/contracts/validator-manager/ValidatorMessages.sol index d19bf255e..a755d84cf 100644 --- a/contracts/validator-manager/ValidatorMessages.sol +++ b/contracts/validator-manager/ValidatorMessages.sol @@ -4,7 +4,7 @@ // SPDX-License-Identifier: Ecosystem pragma solidity 0.8.25; -import {PChainOwner, ConversionData} from "./interfaces/IValidatorManager.sol"; +import {PChainOwner, ConversionData} from "./ACP99Manager.sol"; /** * @dev Packing utilities for the ICM message types used by the Validator Manager contracts, as specified in ACP-77: diff --git a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol index 841f7d362..59cd0b311 100644 --- a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol +++ b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol @@ -52,7 +52,7 @@ struct Delegator { address owner; bytes32 validationID; uint64 weight; - uint64 startedAt; + uint64 startTime; uint64 startingNonce; uint64 endingNonce; } diff --git a/contracts/validator-manager/interfaces/IValidatorManager.sol b/contracts/validator-manager/interfaces/IValidatorManager.sol index 63e24e925..b5b023b74 100644 --- a/contracts/validator-manager/interfaces/IValidatorManager.sol +++ b/contracts/validator-manager/interfaces/IValidatorManager.sol @@ -5,45 +5,13 @@ pragma solidity 0.8.25; -/** - * @dev Validator status - */ -enum ValidatorStatus { - Unknown, - PendingAdded, - Active, - PendingRemoved, - Completed, - Invalidated -} - -/** - * @dev Specifies the owner of a validator's remaining balance or disable owner on the P-Chain. - * P-Chain addresses are also 20-bytes, so we use the address type to represent them. - */ -struct PChainOwner { - uint32 threshold; - address[] addresses; -} - -/** - * @dev Contains the active state of a Validator - */ -struct Validator { - ValidatorStatus status; - bytes nodeID; - uint64 startingWeight; - uint64 messageNonce; - uint64 weight; - uint64 startedAt; - uint64 endedAt; -} +import {PChainOwner} from "../ACP99Manager.sol"; /** * @dev Describes the current churn period */ struct ValidatorChurnPeriod { - uint256 startedAt; + uint256 startTime; uint64 initialWeight; uint64 totalWeight; uint64 churnAmount; @@ -61,28 +29,6 @@ struct ValidatorManagerSettings { uint8 maximumChurnPercentage; } -/** - * @dev Description of the conversion data used to convert - * a subnet to an L1 on the P-Chain. - * This data is the pre-image of a hash that is authenticated by the P-Chain - * and verified by the Validator Manager. - */ -struct ConversionData { - bytes32 subnetID; - bytes32 validatorManagerBlockchainID; - address validatorManagerAddress; - InitialValidator[] initialValidators; -} - -/** - * @dev Specifies an initial validator, used in the conversion data. - */ -struct InitialValidator { - bytes nodeID; - bytes blsPublicKey; - uint64 weight; -} - /** * @dev Specifies a validator to register. */ @@ -98,87 +44,6 @@ struct ValidatorRegistrationInput { * @notice Interface for Validator Manager contracts that implement Subnet-only Validator management. */ interface IValidatorManager { - /** - * @notice Emitted when a new validation period is created by locking stake in the manager contract. - * Note: This event does not mean that the validation period has been successfully registered on the P-Chain, - * and rewards for this validation period will not begin accruing until the {ValidationPeriodRegistered} event is - * emitted. - * @param validationID The ID of the validation period being created. - * @param nodeID The node ID of the validator being registered. - * @param registerValidationMessageID The ID of the ICM message that will be sent to the P-Chain to register the - * validation period. - * @param weight The weight of the validator being registered. - * @param registrationExpiry The Unix timestamp after which the reigistration is no longer valid on the P-Chain. - */ - event ValidationPeriodCreated( - bytes32 indexed validationID, - bytes32 indexed registerValidationMessageID, - uint64 weight, - bytes nodeID, - uint64 registrationExpiry - ); - - event InitialValidatorCreated(bytes32 indexed validationID, uint64 weight, bytes nodeID); - - /** - * @notice Emitted when the staking manager learns that the validation period has been successfully registered - * on the P-Chain. Rewards for this validation period will begin accruing when this event is emitted. - * @param validationID The ID of the validation period being registered. - * @param weight The weight of the validator being registered. - * @param timestamp The time at which the validation period was registered with the contract. - */ - event ValidationPeriodRegistered( - bytes32 indexed validationID, uint64 weight, uint256 timestamp - ); - - /** - * @notice Emitted when the process of ending a registered validation period is started by calling - * {initializeEndValidation}. - * Note: The stake for this validation period remains locked until a {ValidationPeriodRemoved} event is emitted. - * @param validationID The ID of the validation period being removed. - * @param setWeightMessageID The ID of the ICM message that updates the validator's weight on the P-Chain. - * @param weight The weight of the validator being removed. - * @param endTime The time at which the removal was initiated. - */ - event ValidatorRemovalInitialized( - bytes32 indexed validationID, - bytes32 indexed setWeightMessageID, - uint64 weight, - uint256 endTime - ); - - /** - * @notice Emitted when the stake for a validation period is unlocked and returned to the staker. - * This is done by calling {completeEndValidation}, which provides proof from the P-Chain that the - * validation period is not active and will never be active in the future. - * @param validationID The ID of the validation period being removed. - */ - event ValidationPeriodEnded(bytes32 indexed validationID, ValidatorStatus indexed status); - - /** - * @notice Event emitted when validator weight is updated. - * @param validationID The ID of the validation period being updated - * @param nonce The message nonce used to update the validator weight - * @param weight The updated validator weight that is sent to the P-Chain - * @param setWeightMessageID The ID of the ICM message that updates the validator's weight on the P-Chain - */ - event ValidatorWeightUpdate( - bytes32 indexed validationID, - uint64 indexed nonce, - uint64 weight, - bytes32 setWeightMessageID - ); - - /** - * @notice Verifies and sets the initial validator set for the chain through a P-Chain SubnetToL1ConversionMessage. - * @param conversionData The subnet conversion message data used to recompute and verify against the conversionID. - * @param messsageIndex The index that contains the SubnetToL1ConversionMessage ICM message containing the conversionID to be verified against the provided {ConversionData} - */ - function initializeValidatorSet( - ConversionData calldata conversionData, - uint32 messsageIndex - ) external; - /** * @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. @@ -186,28 +51,10 @@ interface IValidatorManager { */ function resendRegisterValidatorMessage(bytes32 validationID) external; - /** - * @notice Completes the validator registration process by returning an acknowledgement of the registration of a - * validationID from the P-Chain. - * @param messageIndex The index of the ICM message to be received providing the acknowledgement. - */ - function completeValidatorRegistration(uint32 messageIndex) 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; - - /** - * @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. Returns the the stake associated - * with the validation. - * Note: 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 {registrationExpiry} being reached. - * @param messageIndex The index of the ICM message to be received providing the proof the validation is not active - * and never will be active on the P-Chain. - */ - function completeEndValidation(uint32 messageIndex) external; } diff --git a/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol b/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol index 013398a6c..e75987602 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, IValidatorManager} from "../interfaces/IValidatorManager.sol"; +import {ValidatorRegistrationInput} from "../interfaces/IValidatorManager.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,6 +17,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"; contract ERC20TokenStakingManagerTest is PoSValidatorManagerTest { using SafeERC20 for IERC20Mintable; @@ -218,7 +219,7 @@ contract ERC20TokenStakingManagerTest is PoSValidatorManagerTest { vm.expectCall(address(token), abi.encodeCall(IERC20Mintable.mint, (account, amount))); } - function _setUp() internal override returns (IValidatorManager) { + function _setUp() internal override returns (ACP99Manager) { // Construct the object under test app = new ERC20TokenStakingManager(ICMInitializable.Allowed); token = new ExampleERC20(); diff --git a/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol b/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol index c1c80fcbb..674a342d8 100644 --- a/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol +++ b/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol @@ -9,13 +9,14 @@ 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, IValidatorManager} from "../interfaces/IValidatorManager.sol"; +import {ValidatorRegistrationInput} from "../interfaces/IValidatorManager.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"; contract NativeTokenStakingManagerTest is PoSValidatorManagerTest { NativeTokenStakingManager public app; @@ -175,7 +176,7 @@ contract NativeTokenStakingManagerTest is PoSValidatorManagerTest { vm.expectCall(nativeMinter, callData); } - function _setUp() internal override returns (IValidatorManager) { + function _setUp() internal override returns (ACP99Manager) { // Construct the object under test app = new TestableNativeTokenStakingManager(ICMInitializable.Allowed); rewardCalculator = new ExampleRewardCalculator(DEFAULT_REWARD_RATE); diff --git a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol index 39be0f19e..e6dc77bb7 100644 --- a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol @@ -8,8 +8,7 @@ pragma solidity 0.8.25; import {PoAValidatorManager} from "../PoAValidatorManager.sol"; import { ValidatorManagerSettings, - ValidatorRegistrationInput, - IValidatorManager + ValidatorRegistrationInput } from "../interfaces/IValidatorManager.sol"; import {ValidatorManagerTest} from "./ValidatorManagerTests.t.sol"; import {ICMInitializable} from "@utilities/ICMInitializable.sol"; @@ -17,6 +16,7 @@ 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"; contract PoAValidatorManagerTest is ValidatorManagerTest { PoAValidatorManager public app; @@ -109,7 +109,7 @@ contract PoAValidatorManagerTest is ValidatorManagerTest { return app.initializeEndValidation(validationID); } - function _setUp() internal override returns (IValidatorManager) { + function _setUp() internal override returns (ACP99Manager) { app = new PoAValidatorManager(ICMInitializable.Allowed); app.initialize( ValidatorManagerSettings({ diff --git a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol index bfd4c5b1a..c6203cf9c 100644 --- a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol @@ -11,11 +11,10 @@ import {PoSValidatorManager} from "../PoSValidatorManager.sol"; import { DelegatorStatus, PoSValidatorManagerSettings } from "../interfaces/IPoSValidatorManager.sol"; -import {ValidatorManager} from "../ValidatorManager.sol"; +import {ValidatorManager, ValidatorStatus} from "../ValidatorManager.sol"; import { ValidatorManagerSettings, - ValidatorRegistrationInput, - ValidatorStatus + ValidatorRegistrationInput } from "../interfaces/IValidatorManager.sol"; import {ValidatorMessages} from "../ValidatorMessages.sol"; import { @@ -220,7 +219,9 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { vm.warp(DEFAULT_COMPLETION_TIMESTAMP); vm.expectRevert( - abi.encodeWithSelector(ValidatorManager.InvalidValidationID.selector, validationID) + abi.encodeWithSelector( + ValidatorManager.UnexpectedValidationID.selector, bytes32(0), validationID + ) ); posValidatorManager.initializeEndValidation(validationID, true, 0); } @@ -295,7 +296,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _mockGetPChainWarpMessage(setValidatorWeightPayload, true); vm.warp(DEFAULT_DELEGATOR_COMPLETE_REGISTRATION_TIMESTAMP); - vm.expectRevert(abi.encodeWithSelector(PoSValidatorManager.InvalidNonce.selector, nonce)); + vm.expectRevert(abi.encodeWithSelector(ValidatorManager.InvalidNonce.selector, nonce)); posValidatorManager.completeDelegatorRegistration(delegationID2, 0); } @@ -1164,7 +1165,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ); _mockGetPChainWarpMessage(setValidatorWeightPayload, true); - vm.expectRevert(abi.encodeWithSelector(PoSValidatorManager.InvalidNonce.selector, nonce)); + vm.expectRevert(abi.encodeWithSelector(ValidatorManager.InvalidNonce.selector, nonce)); posValidatorManager.completeEndDelegation(delegationID2, 0); } @@ -1503,7 +1504,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _mockGetUptimeWarpMessage(uptimeMsg2, true); vm.expectEmit(true, true, true, true, address(validatorManager)); - emit ValidatorRemovalInitialized( + emit InitiatedValidatorRemoval( validationID, bytes32(0), DEFAULT_WEIGHT, DEFAULT_COMPLETION_TIMESTAMP ); @@ -1532,7 +1533,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { posValidatorManager.submitUptimeProof(validationID, 0); vm.expectEmit(true, true, true, true, address(validatorManager)); - emit ValidatorRemovalInitialized( + emit InitiatedValidatorRemoval( validationID, bytes32(0), DEFAULT_WEIGHT, DEFAULT_COMPLETION_TIMESTAMP ); @@ -1612,7 +1613,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _mockSendWarpMessage(setValidatorWeightPayload, bytes32(0)); vm.expectEmit(true, true, true, true, address(validatorManager)); - emit ValidatorRemovalInitialized( + emit InitiatedValidatorRemoval( validationID, bytes32(0), DEFAULT_WEIGHT, DEFAULT_COMPLETION_TIMESTAMP ); @@ -1624,7 +1625,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ValidatorMessages.packL1ValidatorRegistrationMessage(validationID, false); _mockGetPChainWarpMessage(l1ValidatorRegistrationMessage, true); - posValidatorManager.completeEndValidation(0); + posValidatorManager.completeValidatorRemoval(0); assertEq(_getStakeAssetBalance(address(this)), balanceBefore); } @@ -1679,13 +1680,12 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 delegationID = _initializeDefaultDelegatorRegistration(validationID); bytes memory setValidatorWeightPayload = ValidatorMessages.packL1ValidatorWeightMessage( - delegationID, 2, DEFAULT_DELEGATOR_WEIGHT + DEFAULT_WEIGHT + delegationID, 1, DEFAULT_DELEGATOR_WEIGHT + DEFAULT_WEIGHT ); _mockGetPChainWarpMessage(setValidatorWeightPayload, true); - vm.expectRevert( - abi.encodeWithSelector(ValidatorManager.InvalidValidationID.selector, validationID) - ); + // The invalid validationID has sent no weight updates, so its nonce should be 0 + vm.expectRevert(abi.encodeWithSelector(ValidatorManager.InvalidNonce.selector, 1)); vm.warp(DEFAULT_DELEGATOR_COMPLETE_REGISTRATION_TIMESTAMP); posValidatorManager.completeDelegatorRegistration(delegationID, 0); @@ -1712,9 +1712,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ValidatorMessages.packL1ValidatorWeightMessage(delegationID, 2, DEFAULT_WEIGHT); _mockGetPChainWarpMessage(setValidatorWeightPayload, true); - vm.expectRevert( - abi.encodeWithSelector(ValidatorManager.InvalidValidationID.selector, delegationID) - ); + vm.expectRevert(abi.encodeWithSelector(ValidatorManager.InvalidNonce.selector, 2)); posValidatorManager.completeEndDelegation(delegationID, 0); } @@ -1882,7 +1880,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _mockGetUptimeWarpMessage(uptimeMsg, true); vm.expectEmit(true, true, true, true, address(validatorManager)); - emit ValidatorRemovalInitialized( + emit InitiatedValidatorRemoval( validationID, bytes32(0), DEFAULT_WEIGHT, DEFAULT_COMPLETION_TIMESTAMP ); @@ -1984,6 +1982,11 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _beforeSend(_weightToValue(weight), delegatorAddress); + vm.expectEmit(true, true, true, true, address(posValidatorManager)); + emit InitiatedValidatorWeightUpdate( + validationID, expectedNonce, bytes32(0), expectedValidatorWeight + ); + vm.expectEmit(true, true, true, true, address(posValidatorManager)); emit DelegatorAdded({ delegationID: keccak256(abi.encodePacked(validationID, expectedNonce)), @@ -2020,6 +2023,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, expectedNonce, expectedValidatorWeight ); vm.expectEmit(true, true, true, true, address(posValidatorManager)); + emit CompletedValidatorWeightUpdate(validationID, expectedNonce, expectedValidatorWeight); + vm.expectEmit(true, true, true, true, address(posValidatorManager)); emit DelegatorRegistered({ delegationID: delegationID, validationID: validationID, @@ -2152,11 +2157,11 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, endDelegationTimestamp - startDelegationTimestamp ); vm.expectEmit(true, true, true, true, address(posValidatorManager)); - emit ValidatorWeightUpdate({ + emit InitiatedValidatorWeightUpdate({ validationID: validationID, nonce: expectedNonce, weight: expectedValidatorWeight, - setWeightMessageID: bytes32(0) + weightUpdateMessageID: bytes32(0) }); vm.expectEmit(true, true, true, true, address(posValidatorManager)); @@ -2296,7 +2301,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ValidatorMessages.packL1ValidatorRegistrationMessage(validationID, false); vm.expectEmit(true, true, true, true, address(posValidatorManager)); - emit ValidationPeriodEnded(validationID, ValidatorStatus.Completed); + emit CompletedValidatorRemoval(validationID); uint256 balanceBefore = _getStakeAssetBalance(validatorOwner); uint256 rewardRecipientBalanceBefore = _getStakeAssetBalance(rewardRecipient); @@ -2325,7 +2330,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { function _completeEndValidation(bytes memory l1ValidatorRegistrationMessage) internal { _mockGetPChainWarpMessage(l1ValidatorRegistrationMessage, true); - posValidatorManager.completeEndValidation(0); + posValidatorManager.completeValidatorRemoval(0); } function _completeEndDelegationWithChecks( @@ -2343,6 +2348,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes memory weightUpdateMessage = ValidatorMessages.packL1ValidatorWeightMessage( validationID, expectedNonce, validatorWeight ); + vm.expectEmit(true, true, true, true, address(posValidatorManager)); + emit CompletedValidatorWeightUpdate(validationID, expectedNonce, validatorWeight); vm.expectEmit(true, true, true, true, address(posValidatorManager)); emit DelegationEnded( diff --git a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol index 53865d841..e8a76849c 100644 --- a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol @@ -6,37 +6,32 @@ pragma solidity 0.8.25; import {Test} from "@forge-std/Test.sol"; -import {ValidatorManager, ConversionData, InitialValidator} from "../ValidatorManager.sol"; +import {ValidatorManager} from "../ValidatorManager.sol"; import {ValidatorMessages} from "../ValidatorMessages.sol"; -import { - ValidatorStatus, - ValidatorRegistrationInput, - PChainOwner, - IValidatorManager -} from "../interfaces/IValidatorManager.sol"; +import {ValidatorRegistrationInput} from "../interfaces/IValidatorManager.sol"; import { WarpMessage, IWarpMessenger } from "@avalabs/subnet-evm-contracts@1.2.0/contracts/interfaces/IWarpMessenger.sol"; +import {ACP99Manager, ConversionData, InitialValidator, PChainOwner} from "../ACP99Manager.sol"; // TODO: Remove this once all unit tests implemented // solhint-disable no-empty-blocks abstract contract ValidatorManagerTest is Test { bytes32 public constant DEFAULT_SUBNET_ID = bytes32(hex"1234567812345678123456781234567812345678123456781234567812345678"); - bytes public constant DEFAULT_NODE_ID = - bytes(hex"1234567812345678123456781234567812345678123456781234567812345678"); + bytes public constant DEFAULT_NODE_ID = bytes(hex"1234123412341234123412341234123412341234"); bytes public constant DEFAULT_INITIAL_VALIDATOR_NODE_ID_1 = - bytes(hex"2345678123456781234567812345678123456781234567812345678123456781"); + bytes(hex"2341234123412341234123412341234123412341"); bytes public constant DEFAULT_INITIAL_VALIDATOR_NODE_ID_2 = - bytes(hex"1345678123456781234567812345678123456781234567812345678123456781"); + bytes(hex"3412341234123412341234123412341234123412"); bytes public constant DEFAULT_BLS_PUBLIC_KEY = bytes( hex"123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678" ); bytes32 public constant DEFAULT_SOURCE_BLOCKCHAIN_ID = bytes32(hex"abcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcd"); bytes32 public constant DEFAULT_SUBNET_CONVERSION_ID = - bytes32(hex"76a386628f079b7b00452f8cab0925740363fcd52b721a8cf91773e857327b36"); + bytes32(hex"4223c0d9f9d49acd29e1e3121d1399105c2bd7ff670874c6e71de373cdbb4463"); address public constant WARP_PRECOMPILE_ADDRESS = 0x0200000000000000000000000000000000000005; uint64 public constant DEFAULT_WEIGHT = 1e6; @@ -62,28 +57,34 @@ abstract contract ValidatorManagerTest is Test { // Used to create unique validator IDs in {_newNodeID} uint64 public nodeIDCounter = 0; - event ValidationPeriodCreated( - bytes32 indexed validationID, - bytes32 indexed registerValidationMessageID, - uint64 weight, - bytes nodeID, - uint64 registrationExpiry + event RegisteredInitialValidator( + bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight ); - event InitialValidatorCreated(bytes32 indexed validationID, uint64 weight, bytes nodeID); - - event ValidationPeriodRegistered( - bytes32 indexed validationID, uint64 weight, uint256 timestamp + event InitiatedValidatorRegistration( + bytes32 indexed validationID, + bytes20 indexed nodeID, + bytes32 registrationMessageID, + uint64 registrationExpiry, + uint64 weight ); - event ValidatorRemovalInitialized( + event CompletedValidatorRegistration(bytes32 indexed validationID, uint64 weight); + + event InitiatedValidatorRemoval( bytes32 indexed validationID, - bytes32 indexed setWeightMessageID, + bytes32 validatorWeightMessageID, uint64 weight, - uint256 endTime + uint64 endTime ); - event ValidationPeriodEnded(bytes32 indexed validationID, ValidatorStatus indexed status); + event CompletedValidatorRemoval(bytes32 indexed validationID); + + event InitiatedValidatorWeightUpdate( + bytes32 indexed validationID, uint64 nonce, bytes32 weightUpdateMessageID, uint64 weight + ); + + event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight); event ValidatorWeightUpdate( bytes32 indexed validationID, @@ -278,9 +279,9 @@ abstract contract ValidatorManagerTest is Test { _mockGetPChainWarpMessage(l1ValidatorRegistrationMessage, true); vm.expectEmit(true, true, true, true, address(validatorManager)); - emit ValidationPeriodEnded(validationID, ValidatorStatus.Completed); + emit CompletedValidatorRemoval(validationID); - validatorManager.completeEndValidation(0); + validatorManager.completeValidatorRemoval(0); } function testCompleteInvalidatedValidation() public { @@ -297,14 +298,14 @@ abstract contract ValidatorManagerTest is Test { _mockGetPChainWarpMessage(l1ValidatorRegistrationMessage, true); vm.expectEmit(true, true, true, true, address(validatorManager)); - emit ValidationPeriodEnded(validationID, ValidatorStatus.Invalidated); + emit CompletedValidatorRemoval(validationID); - validatorManager.completeEndValidation(0); + validatorManager.completeValidatorRemoval(0); } function testInitialWeightsTooLow() public { vm.prank(address(123)); - IValidatorManager manager = _setUp(); + ACP99Manager manager = _setUp(); _mockGetBlockchainID(); vm.expectRevert(abi.encodeWithSelector(ValidatorManager.InvalidTotalWeight.selector, 4)); @@ -314,12 +315,12 @@ abstract contract ValidatorManagerTest is Test { function testRemoveValidatorTotalWeight5() public { // Use prank here, because otherwise each test will end up with a different contract address, leading to a different subnet conversion hash. vm.prank(address(123)); - IValidatorManager manager = _setUp(); + ACP99Manager manager = _setUp(); _mockGetBlockchainID(); _mockGetPChainWarpMessage( ValidatorMessages.packSubnetToL1ConversionMessage( - bytes32(hex"1d72565851401e05d6351ebf5443d9bdc04953f3233da1345af126e7e4be7464") + bytes32(hex"0a2c50bd11652e39fadea9448d2d67fa27d5d8ef493600e9bbb9531bc7f12306") ), true ); @@ -411,9 +412,10 @@ abstract contract ValidatorManagerTest is Test { ); } + // Returns a 20-byte node ID function _newNodeID() internal returns (bytes memory) { nodeIDCounter++; - return abi.encodePacked(sha256(new bytes(nodeIDCounter))); + return abi.encodePacked(bytes20(sha256(new bytes(nodeIDCounter)))); } function _setUpInitializeValidatorRegistration( @@ -434,6 +436,7 @@ abstract contract ValidatorManagerTest is Test { weight: weight }) ); + bytes20 fixedID = _fixedNodeID(nodeID); (, bytes memory registerL1ValidatorMessage) = ValidatorMessages .packRegisterL1ValidatorMessage( ValidatorMessages.ValidationPeriod({ @@ -451,7 +454,9 @@ abstract contract ValidatorManagerTest is Test { _beforeSend(_weightToValue(weight), address(this)); vm.expectEmit(true, true, true, true, address(validatorManager)); - emit ValidationPeriodCreated(validationID, bytes32(0), weight, nodeID, registrationExpiry); + emit InitiatedValidatorRegistration( + validationID, fixedID, bytes32(0), registrationExpiry, weight + ); _initializeValidatorRegistration( ValidatorRegistrationInput({ @@ -483,7 +488,7 @@ abstract contract ValidatorManagerTest is Test { vm.warp(registrationTimestamp); vm.expectEmit(true, true, true, true, address(validatorManager)); - emit ValidationPeriodRegistered(validationID, weight, registrationTimestamp); + emit CompletedValidatorRegistration(validationID, weight); validatorManager.completeValidatorRegistration(0); } @@ -627,7 +632,7 @@ abstract contract ValidatorManagerTest is Test { address rewardRecipient ) internal virtual; - function _setUp() internal virtual returns (IValidatorManager); + function _setUp() internal virtual returns (ACP99Manager); function _beforeSend(uint256 amount, address spender) internal virtual; @@ -727,5 +732,14 @@ abstract contract ValidatorManagerTest is Test { ) ) & ~bytes32(uint256(0xff)); } + + function _fixedNodeID(bytes memory nodeID) internal pure returns (bytes20) { + bytes20 fixedID; + // solhint-disable-next-line no-inline-assembly + assembly { + fixedID := mload(add(nodeID, 32)) + } + return fixedID; + } } // solhint-enable no-empty-blocks diff --git a/contracts/validator-manager/tests/ValidatorMessagesTests.t.sol b/contracts/validator-manager/tests/ValidatorMessagesTests.t.sol index 2c05d20a7..50d56dbff 100644 --- a/contracts/validator-manager/tests/ValidatorMessagesTests.t.sol +++ b/contracts/validator-manager/tests/ValidatorMessagesTests.t.sol @@ -7,7 +7,7 @@ pragma solidity 0.8.25; import {Test} from "@forge-std/Test.sol"; import {ValidatorMessages} from "../ValidatorMessages.sol"; -import {PChainOwner, ConversionData, InitialValidator} from "../interfaces/IValidatorManager.sol"; +import {PChainOwner, ConversionData, InitialValidator} from "../ACP99Manager.sol"; contract ValidatorMessagesTest is Test { bytes32 public constant DEFAULT_SUBNET_ID = diff --git a/scripts/abi_bindings.sh b/scripts/abi_bindings.sh index b7a2d58f2..0f8604905 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" +WrappedNativeToken MockERC20SendAndCallReceiver MockNativeSendAndCallReceiver ExampleERC20Decimals IValidatorManager IPoSValidatorManager ACP99Manager" PROXY_LIST="TransparentUpgradeableProxy ProxyAdmin" SUBNET_EVM_LIST="INativeMinter" diff --git a/tests/utils/validator_manager.go b/tests/utils/validator_manager.go index 8e7d69efe..e693ae1fb 100644 --- a/tests/utils/validator_manager.go +++ b/tests/utils/validator_manager.go @@ -25,12 +25,12 @@ import ( pwallet "github.com/ava-labs/avalanchego/wallet/chain/p/wallet" proxyadmin "github.com/ava-labs/icm-contracts/abi-bindings/go/ProxyAdmin" exampleerc20 "github.com/ava-labs/icm-contracts/abi-bindings/go/mocks/ExampleERC20" + acp99manager "github.com/ava-labs/icm-contracts/abi-bindings/go/validator-manager/ACP99Manager" erc20tokenstakingmanager "github.com/ava-labs/icm-contracts/abi-bindings/go/validator-manager/ERC20TokenStakingManager" examplerewardcalculator "github.com/ava-labs/icm-contracts/abi-bindings/go/validator-manager/ExampleRewardCalculator" nativetokenstakingmanager "github.com/ava-labs/icm-contracts/abi-bindings/go/validator-manager/NativeTokenStakingManager" poavalidatormanager "github.com/ava-labs/icm-contracts/abi-bindings/go/validator-manager/PoAValidatorManager" iposvalidatormanager "github.com/ava-labs/icm-contracts/abi-bindings/go/validator-manager/interfaces/IPoSValidatorManager" - ivalidatormanager "github.com/ava-labs/icm-contracts/abi-bindings/go/validator-manager/interfaces/IValidatorManager" "github.com/ava-labs/icm-contracts/tests/interfaces" "github.com/ava-labs/subnet-evm/accounts/abi/bind" "github.com/ava-labs/subnet-evm/core/types" @@ -73,13 +73,13 @@ func DeployValidatorManager( senderKey *ecdsa.PrivateKey, l1 interfaces.L1TestInfo, managerType ValidatorManagerConcreteType, -) (common.Address, *ivalidatormanager.IValidatorManager) { +) (common.Address, *acp99manager.ACP99Manager) { opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID) Expect(err).Should(BeNil()) var ( tx *types.Transaction address common.Address - validatorManager *ivalidatormanager.IValidatorManager + validatorManager *acp99manager.ACP99Manager ) switch managerType { case PoAValidatorManager: @@ -118,7 +118,7 @@ func DeployValidatorManager( Expect(err).Should(BeNil()) } - validatorManager, err = ivalidatormanager.NewIValidatorManager(address, l1.RPCClient) + validatorManager, err = acp99manager.NewACP99Manager(address, l1.RPCClient) Expect(err).Should(BeNil()) // Wait for the transaction to be mined @@ -277,14 +277,14 @@ func InitializeValidatorSet( ) []ids.ID { log.Println("Initializing validator set", "subnetID", l1Info.SubnetID) initialValidators := make([]warpMessage.SubnetToL1ConversionValidatorData, len(nodes)) - initialValidatorsABI := make([]ivalidatormanager.InitialValidator, len(nodes)) + initialValidatorsABI := make([]acp99manager.InitialValidator, len(nodes)) for i, node := range nodes { initialValidators[i] = warpMessage.SubnetToL1ConversionValidatorData{ NodeID: node.NodeID.Bytes(), BLSPublicKey: node.NodePoP.PublicKey, Weight: nodes[i].Weight, } - initialValidatorsABI[i] = ivalidatormanager.InitialValidator{ + initialValidatorsABI[i] = acp99manager.InitialValidator{ NodeID: node.NodeID.Bytes(), BlsPublicKey: node.NodePoP.PublicKey[:], Weight: nodes[i].Weight, @@ -297,7 +297,7 @@ func InitializeValidatorSet( ManagerAddress: validatorManagerAddress[:], Validators: initialValidators, } - l1ConversionDataABI := ivalidatormanager.ConversionData{ + l1ConversionDataABI := acp99manager.ConversionData{ SubnetID: l1Info.SubnetID, ValidatorManagerBlockchainID: l1Info.BlockchainID, ValidatorManagerAddress: validatorManagerAddress, @@ -322,16 +322,16 @@ func InitializeValidatorSet( l1ConversionSignedMessage, l1ConversionDataABI, ) - manager, err := ivalidatormanager.NewIValidatorManager(validatorManagerAddress, l1Info.RPCClient) + manager, err := acp99manager.NewACP99Manager(validatorManagerAddress, l1Info.RPCClient) Expect(err).Should(BeNil()) // Check that the first initial validator was registered successfully initialValidatorCreatedEvent, err := GetEventFromLogs( receipt.Logs, - manager.ParseInitialValidatorCreated, + manager.ParseRegisteredInitialValidator, ) Expect(err).Should(BeNil()) - Expect(initialValidatorCreatedEvent.NodeID).Should(Equal(nodes[0].NodeID.Bytes())) + Expect(ids.NodeID(initialValidatorCreatedEvent.NodeID)).Should(Equal(nodes[0].NodeID)) var validationIDs []ids.ID for i := range nodes { validationIDs = append(validationIDs, l1Info.SubnetID.Append(uint32(i))) @@ -351,9 +351,9 @@ func DeliverL1Conversion( l1 interfaces.L1TestInfo, validatorManagerAddress common.Address, l1ConversionSignedMessage *avalancheWarp.Message, - l1ConversionData ivalidatormanager.ConversionData, + l1ConversionData acp99manager.ConversionData, ) *types.Receipt { - abi, err := ivalidatormanager.IValidatorManagerMetaData.GetAbi() + abi, err := acp99manager.ACP99ManagerMetaData.GetAbi() Expect(err).Should(BeNil()) callData, err := abi.Pack("initializeValidatorSet", l1ConversionData, uint32(0)) Expect(err).Should(BeNil()) @@ -379,6 +379,7 @@ func InitializeNativeValidatorRegistration( node Node, expiry uint64, stakingManager *nativetokenstakingmanager.NativeTokenStakingManager, + stakingManagerAddress common.Address, ) (*types.Receipt, ids.ID) { opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID) Expect(err).Should(BeNil()) @@ -396,12 +397,14 @@ func InitializeNativeValidatorRegistration( ) Expect(err).Should(BeNil()) receipt := WaitForTransactionSuccess(ctx, l1, tx.Hash()) + acp99Manager, err := acp99manager.NewACP99Manager(stakingManagerAddress, l1.RPCClient) + Expect(err).Should(BeNil()) registrationInitiatedEvent, err := GetEventFromLogs( receipt.Logs, - stakingManager.ParseValidationPeriodCreated, + acp99Manager.ParseInitiatedValidatorRegistration, ) Expect(err).Should(BeNil()) - Expect(registrationInitiatedEvent.NodeID).Should(Equal(node.NodeID.Bytes())) + Expect(ids.NodeID(registrationInitiatedEvent.NodeID)).Should(Equal(node.NodeID)) return receipt, ids.ID(registrationInitiatedEvent.ValidationID) } @@ -441,12 +444,14 @@ func InitializeERC20ValidatorRegistration( ) Expect(err).Should(BeNil()) receipt := WaitForTransactionSuccess(ctx, l1, tx.Hash()) + acp99Manager, err := acp99manager.NewACP99Manager(stakingManagerAddress, l1.RPCClient) + Expect(err).Should(BeNil()) registrationInitiatedEvent, err := GetEventFromLogs( receipt.Logs, - stakingManager.ParseValidationPeriodCreated, + acp99Manager.ParseInitiatedValidatorRegistration, ) Expect(err).Should(BeNil()) - Expect(registrationInitiatedEvent.NodeID).Should(Equal(node.NodeID.Bytes())) + Expect(ids.NodeID(registrationInitiatedEvent.NodeID)).Should(Equal(node.NodeID)) return receipt, ids.ID(registrationInitiatedEvent.ValidationID) } @@ -457,6 +462,7 @@ func InitializePoAValidatorRegistration( node Node, expiry uint64, validatorManager *poavalidatormanager.PoAValidatorManager, + validatorManagerAddress common.Address, ) (*types.Receipt, ids.ID) { opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID) Expect(err).Should(BeNil()) @@ -472,12 +478,14 @@ func InitializePoAValidatorRegistration( ) Expect(err).Should(BeNil()) receipt := WaitForTransactionSuccess(ctx, l1, tx.Hash()) + acp99Manager, err := acp99manager.NewACP99Manager(validatorManagerAddress, l1.RPCClient) + Expect(err).Should(BeNil()) registrationInitiatedEvent, err := GetEventFromLogs( receipt.Logs, - validatorManager.ParseValidationPeriodCreated, + acp99Manager.ParseInitiatedValidatorRegistration, ) Expect(err).Should(BeNil()) - Expect(registrationInitiatedEvent.NodeID).Should(Equal(node.NodeID.Bytes())) + Expect(ids.NodeID(registrationInitiatedEvent.NodeID)).Should(Equal(node.NodeID)) return receipt, ids.ID(registrationInitiatedEvent.ValidationID) } @@ -488,7 +496,7 @@ func CompleteValidatorRegistration( stakingManagerContractAddress common.Address, registrationSignedMessage *avalancheWarp.Message, ) *types.Receipt { - abi, err := ivalidatormanager.IValidatorManagerMetaData.GetAbi() + abi, err := acp99manager.ACP99ManagerMetaData.GetAbi() Expect(err).Should(BeNil()) callData, err := abi.Pack("completeValidatorRegistration", uint32(0)) Expect(err).Should(BeNil()) @@ -536,7 +544,7 @@ func InitializeAndCompleteNativeValidatorRegistration( l1Info interfaces.L1TestInfo, pChainInfo interfaces.L1TestInfo, stakingManager *nativetokenstakingmanager.NativeTokenStakingManager, - stakingManagerContractAddress common.Address, + stakingManagerAddress common.Address, expiry uint64, node Node, pchainWallet pwallet.Wallet, @@ -556,6 +564,7 @@ func InitializeAndCompleteNativeValidatorRegistration( node, expiry, stakingManager, + stakingManagerAddress, ) // Gather subnet-evm Warp signatures for the RegisterL1ValidatorMessage & relay to the P-Chain @@ -589,13 +598,15 @@ func InitializeAndCompleteNativeValidatorRegistration( ctx, fundedKey, l1Info, - stakingManagerContractAddress, + stakingManagerAddress, registrationSignedMessage, ) // Check that the validator is registered in the staking contract + acp99Manager, err := acp99manager.NewACP99Manager(stakingManagerAddress, l1Info.RPCClient) + Expect(err).Should(BeNil()) registrationEvent, err := GetEventFromLogs( receipt.Logs, - stakingManager.ParseValidationPeriodRegistered, + acp99Manager.ParseCompletedValidatorRegistration, ) Expect(err).Should(BeNil()) Expect(registrationEvent.ValidationID[:]).Should(Equal(validationID[:])) @@ -671,9 +682,11 @@ func InitializeAndCompleteERC20ValidatorRegistration( registrationSignedMessage, ) // Check that the validator is registered in the staking contract + acp99Manager, err := acp99manager.NewACP99Manager(stakingManagerAddress, l1Info.RPCClient) + Expect(err).Should(BeNil()) registrationEvent, err := GetEventFromLogs( receipt.Logs, - stakingManager.ParseValidationPeriodRegistered, + acp99Manager.ParseCompletedValidatorRegistration, ) Expect(err).Should(BeNil()) Expect(registrationEvent.ValidationID[:]).Should(Equal(validationID[:])) @@ -703,6 +716,7 @@ func InitializeAndCompletePoAValidatorRegistration( node, expiry, validatorManager, + validatorManagerAddress, ) // Gather subnet-evm Warp signatures for the RegisterL1ValidatorMessage & relay to the P-Chain @@ -739,9 +753,11 @@ func InitializeAndCompletePoAValidatorRegistration( registrationSignedMessage, ) // Check that the validator is registered in the staking contract + acp99Manager, err := acp99manager.NewACP99Manager(validatorManagerAddress, l1Info.RPCClient) + Expect(err).Should(BeNil()) registrationEvent, err := GetEventFromLogs( receipt.Logs, - validatorManager.ParseValidationPeriodRegistered, + acp99Manager.ParseCompletedValidatorRegistration, ) Expect(err).Should(BeNil()) Expect(registrationEvent.ValidationID[:]).Should(Equal(validationID[:])) @@ -903,9 +919,9 @@ func CompleteEndValidation( stakingManagerContractAddress common.Address, registrationSignedMessage *avalancheWarp.Message, ) *types.Receipt { - abi, err := ivalidatormanager.IValidatorManagerMetaData.GetAbi() + abi, err := acp99manager.ACP99ManagerMetaData.GetAbi() Expect(err).Should(BeNil()) - callData, err := abi.Pack("completeEndValidation", uint32(0)) + callData, err := abi.Pack("completeValidatorRemoval", uint32(0)) Expect(err).Should(BeNil()) return CallWarpReceiver( ctx, @@ -1070,9 +1086,11 @@ func InitializeAndCompleteEndInitialPoSValidation( stakingManager, validationID, ) + acp99Manager, err := acp99manager.NewACP99Manager(stakingManagerAddress, l1Info.RPCClient) + Expect(err).Should(BeNil()) validatorRemovalEvent, err := GetEventFromLogs( receipt.Logs, - stakingManager.ParseValidatorRemovalInitialized, + acp99Manager.ParseInitiatedValidatorRemoval, ) Expect(err).Should(BeNil()) Expect(validatorRemovalEvent.ValidationID[:]).Should(Equal(validationID[:])) @@ -1118,7 +1136,7 @@ func InitializeAndCompleteEndInitialPoSValidation( // Check that the validator is has been delisted from the staking contract validationEndedEvent, err := GetEventFromLogs( receipt.Logs, - stakingManager.ParseValidationPeriodEnded, + acp99Manager.ParseCompletedValidatorRemoval, ) Expect(err).Should(BeNil()) Expect(validationEndedEvent.ValidationID[:]).Should(Equal(validationID[:])) @@ -1167,9 +1185,11 @@ func InitializeAndCompleteEndPoSValidation( ) } + acp99Manager, err := acp99manager.NewACP99Manager(stakingManagerAddress, l1Info.RPCClient) + Expect(err).Should(BeNil()) validatorRemovalEvent, err := GetEventFromLogs( receipt.Logs, - stakingManager.ParseValidatorRemovalInitialized, + acp99Manager.ParseInitiatedValidatorRemoval, ) Expect(err).Should(BeNil()) Expect(validatorRemovalEvent.ValidationID[:]).Should(Equal(validationID[:])) @@ -1215,7 +1235,7 @@ func InitializeAndCompleteEndPoSValidation( // Check that the validator is has been delisted from the staking contract registrationEvent, err := GetEventFromLogs( receipt.Logs, - stakingManager.ParseValidationPeriodEnded, + acp99Manager.ParseCompletedValidatorRemoval, ) Expect(err).Should(BeNil()) Expect(registrationEvent.ValidationID[:]).Should(Equal(validationID[:])) @@ -1245,9 +1265,11 @@ func InitializeAndCompleteEndInitialPoAValidation( stakingManager, validationID, ) + acp99Manager, err := acp99manager.NewACP99Manager(stakingManagerAddress, l1Info.RPCClient) + Expect(err).Should(BeNil()) validatorRemovalEvent, err := GetEventFromLogs( receipt.Logs, - stakingManager.ParseValidatorRemovalInitialized, + acp99Manager.ParseInitiatedValidatorRemoval, ) Expect(err).Should(BeNil()) Expect(validatorRemovalEvent.ValidationID[:]).Should(Equal(validationID[:])) @@ -1293,7 +1315,7 @@ func InitializeAndCompleteEndInitialPoAValidation( // Check that the validator is has been delisted from the staking contract validationEndedEvent, err := GetEventFromLogs( receipt.Logs, - stakingManager.ParseValidationPeriodEnded, + acp99Manager.ParseCompletedValidatorRemoval, ) Expect(err).Should(BeNil()) Expect(validationEndedEvent.ValidationID[:]).Should(Equal(validationID[:])) @@ -1320,9 +1342,11 @@ func InitializeAndCompleteEndPoAValidation( validatorManager, validationID, ) + acp99Manager, err := acp99manager.NewACP99Manager(validatorManagerAddress, l1Info.RPCClient) + Expect(err).Should(BeNil()) validatorRemovalEvent, err := GetEventFromLogs( receipt.Logs, - validatorManager.ParseValidatorRemovalInitialized, + acp99Manager.ParseInitiatedValidatorRemoval, ) Expect(err).Should(BeNil()) Expect(validatorRemovalEvent.ValidationID[:]).Should(Equal(validationID[:])) @@ -1360,7 +1384,7 @@ func InitializeAndCompleteEndPoAValidation( // Check that the validator is has been delisted from the staking contract registrationEvent, err := GetEventFromLogs( receipt.Logs, - validatorManager.ParseValidationPeriodEnded, + acp99Manager.ParseCompletedValidatorRemoval, ) Expect(err).Should(BeNil()) Expect(registrationEvent.ValidationID[:]).Should(Equal(validationID[:]))