From 61074de92066b90bea68e71a843e287cebc222d9 Mon Sep 17 00:00:00 2001 From: Galaxy <30950645+GalaxySciTech@users.noreply.github.com> Date: Fri, 26 Jul 2024 12:41:01 +0400 Subject: [PATCH 01/12] update --- .../validator/src/contracts/XDCValidator.sol | 343 ++++++++------ .../src/contracts/XDCValidatorOld.sol | 434 ++++++++++++++++++ 2 files changed, 640 insertions(+), 137 deletions(-) create mode 100644 contracts/validator/src/contracts/XDCValidatorOld.sol diff --git a/contracts/validator/src/contracts/XDCValidator.sol b/contracts/validator/src/contracts/XDCValidator.sol index cd162871e..365c21ba8 100644 --- a/contracts/validator/src/contracts/XDCValidator.sol +++ b/contracts/validator/src/contracts/XDCValidator.sol @@ -26,95 +26,106 @@ contract XDCValidator { uint256[] blockNumbers; } - mapping(address => WithdrawState) private withdrawsState; + mapping(address => WithdrawState) withdrawsState; mapping(address => ValidatorState) public validatorsState; mapping(address => address[]) public voters; // Mapping structures added for KYC feature. - mapping(address => string[]) public kycString; - mapping(address => uint256) public invalidKYCCount; + mapping(address => uint) public invalidKYCCount; mapping(address => mapping(address => bool)) public hasVotedInvalid; mapping(address => address[]) public ownerToCandidate; address[] public owners; address[] public candidates; - uint256 public minCandidateNum; + uint256 public candidateCount = 0; + uint256 public ownerCount = 0; uint256 public minCandidateCap; uint256 public minVoterCap; uint256 public maxValidatorNumber; uint256 public candidateWithdrawDelay; uint256 public voterWithdrawDelay; + // owner => invalid + mapping(address => bool) public invalidOwner; + // candaite => invalid + mapping(address => bool) public invalidCandidate; address[] public grandMasters; + mapping(address => bool) public grandMasterMap; modifier onlyValidCandidateCap() { // anyone can deposit X XDC to become a candidate - require(msg.value >= minCandidateCap, "Low Candidate Cap"); + require(msg.value >= minCandidateCap, "Invalid Candidate Cap"); _; } modifier onlyValidVoterCap() { - require(msg.value >= minVoterCap, "Low Voter Cap"); + require(msg.value >= minVoterCap, "Invalid Voter Cap"); _; } - modifier onlyKYCWhitelisted() { + modifier onlyOwner(address _candidate) { require( - kycString[msg.sender].length != 0 || - ownerToCandidate[msg.sender].length > 0, - "Not KYC Whitelisted" + validatorsState[_candidate].owner == msg.sender, + "Only owner can call this function" ); _; } - modifier onlyOwner(address _candidate) { - require(validatorsState[_candidate].owner == msg.sender, "Not Owner"); - _; - } - modifier onlyCandidate(address _candidate) { - require(validatorsState[_candidate].isCandidate, "Not Candidate"); + require( + validatorsState[_candidate].isCandidate, + "Only candidate can call this function" + ); _; } modifier onlyValidCandidate(address _candidate) { - require(validatorsState[_candidate].isCandidate, "Not Valid Candidate"); + require(!invalidCandidate[_candidate], "Invalid Candidate"); + require(validatorsState[_candidate].isCandidate, "Invalid Candidate"); _; } modifier onlyNotCandidate(address _candidate) { - require(!validatorsState[_candidate].isCandidate, "Already Candidate"); + require(!invalidCandidate[_candidate], "Invalid Candidate"); + require( + !validatorsState[_candidate].isCandidate, + "Already a candidate" + ); _; } modifier onlyValidVote(address _candidate, uint256 _cap) { require( validatorsState[_candidate].voters[msg.sender] >= _cap, - "Insufficient Vote Cap" + "Invalid Vote" ); if (validatorsState[_candidate].owner == msg.sender) { require( validatorsState[_candidate].voters[msg.sender].sub(_cap) >= minCandidateCap, - "Below Min Cap" + "Minimum cap should be maintained" ); } _; } - modifier onlyValidWithdraw(uint256 _blockNumber, uint256 _index) { - require(_blockNumber > 0, "Invalid Block Number"); - require(block.number >= _blockNumber, "Block Number Too High"); + modifier onlyValidWithdraw(uint256 _blockNumber, uint _index) { + require(!invalidOwner[msg.sender], "Invalid Owner"); + require(_blockNumber > 0, "Invalid block number"); + require( + block.number >= _blockNumber, + "Block number should be less than current block number" + ); require( withdrawsState[msg.sender].caps[_blockNumber] > 0, - "Invalid Withdraw Cap" + "No cap to withdraw" ); require( withdrawsState[msg.sender].blockNumbers[_index] == _blockNumber, - "Mismatch Block Number" + "Invalid index" ); _; } @@ -125,8 +136,8 @@ contract XDCValidator { } constructor( - address[] memory _candidates, - uint256[] memory _caps, + address[] _candidates, + uint256[] _caps, address _firstOwner, uint256 _minCandidateCap, uint256 _minVoterCap, @@ -136,19 +147,21 @@ contract XDCValidator { address[] memory _grandMasters, uint256 _minCandidateNum ) public { - minCandidateNum = _minCandidateNum; minCandidateCap = _minCandidateCap; minVoterCap = _minVoterCap; maxValidatorNumber = _maxValidatorNumber; candidateWithdrawDelay = _candidateWithdrawDelay; voterWithdrawDelay = _voterWithdrawDelay; + candidateCount = _candidates.length; owners.push(_firstOwner); + ownerCount++; for (uint256 i = 0; i < _candidates.length; i++) { candidates.push(_candidates[i]); - ValidatorState storage vs = validatorsState[_candidates[i]]; - vs.owner = _firstOwner; - vs.isCandidate = true; - vs.cap = _caps[i]; + validatorsState[_candidates[i]] = ValidatorState({ + owner: _firstOwner, + isCandidate: true, + cap: _caps[i] + }); voters[_candidates[i]].push(_firstOwner); ownerToCandidate[_firstOwner].push(_candidates[i]); validatorsState[_candidates[i]].voters[_firstOwner] = _caps[i]; @@ -159,12 +172,6 @@ contract XDCValidator { } } - // uploadKYC : anyone can upload a KYC; its not equivalent to becoming an owner. - function uploadKYC(string kychash) external { - kycString[msg.sender].push(kychash); - emit UploadedKYC(msg.sender, kychash); - } - // propose : any non-candidate who has uploaded its KYC can become an owner by proposing a candidate. function propose( address _candidate @@ -177,16 +184,18 @@ contract XDCValidator { { uint256 cap = validatorsState[_candidate].cap.add(msg.value); candidates.push(_candidate); - ValidatorState storage vs = validatorsState[_candidate]; - vs.owner = msg.sender; - vs.isCandidate = true; - vs.cap = cap; + validatorsState[_candidate] = ValidatorState({ + owner: msg.sender, + isCandidate: true, + cap: cap + }); validatorsState[_candidate].voters[msg.sender] = validatorsState[ _candidate ].voters[msg.sender].add(msg.value); - + candidateCount = candidateCount.add(1); if (ownerToCandidate[msg.sender].length == 0) { owners.push(msg.sender); + ownerCount++; } ownerToCandidate[msg.sender].push(_candidate); voters[_candidate].push(msg.sender); @@ -214,14 +223,10 @@ contract XDCValidator { emit Vote(msg.sender, _candidate, msg.value); } - function getCandidates() public view returns (address[] memory) { + function getCandidates() public view returns (address[]) { return candidates; } - function getGrandMasters() public view returns (address[] memory) { - return grandMasters; - } - function getCandidateCap(address _candidate) public view returns (uint256) { return validatorsState[_candidate].cap; } @@ -239,9 +244,7 @@ contract XDCValidator { return validatorsState[_candidate].voters[_voter]; } - function getVoters( - address _candidate - ) public view returns (address[] memory) { + function getVoters(address _candidate) public view returns (address[]) { return voters[_candidate]; } @@ -249,7 +252,7 @@ contract XDCValidator { return validatorsState[_candidate].isCandidate; } - function getWithdrawBlockNumbers() public view returns (uint256[] memory) { + function getWithdrawBlockNumbers() public view returns (uint256[]) { return withdrawsState[msg.sender].blockNumbers; } @@ -284,14 +287,28 @@ contract XDCValidator { address _candidate ) public onlyOwner(_candidate) onlyCandidate(_candidate) { validatorsState[_candidate].isCandidate = false; - for (uint256 i = 0; i < candidates.length; i++) { - if (candidates[i] == _candidate) { - delete candidates[i]; + candidateCount = candidateCount.sub(1); + + deleteCandidate(_candidate); + + // Cleanup the ownerToCandidate mapping for the resigning candidate's owner + address[] storage ownedCandidates = ownerToCandidate[msg.sender]; + uint256 ownedCandidatesLength = ownedCandidates.length; + for (uint256 j = 0; j < ownedCandidatesLength; j++) { + if (ownedCandidates[j] == _candidate) { + ownedCandidates[j] = ownedCandidates[ownedCandidatesLength - 1]; + delete ownedCandidates[ownedCandidatesLength - 1]; + ownedCandidates.length--; // Manually decrease the array length break; } } - candidates = removeZeroAddresses(candidates); - checkMinCandidateNum(); + + // Optionally, consider adjusting ownerCount if needed + if (ownedCandidates.length == 0) { + // If specific logic is needed to manage the owners array, implement here + deleteOwner(msg.sender); + } + uint256 cap = validatorsState[_candidate].voters[msg.sender]; validatorsState[_candidate].cap = validatorsState[_candidate].cap.sub( cap @@ -306,114 +323,82 @@ contract XDCValidator { emit Resign(msg.sender, _candidate); } - function checkMinCandidateNum() private view { - require(candidates.length >= minCandidateNum, "Low Candidate Count"); - } - // voteInvalidKYC : any candidate can vote for invalid KYC i.e. a particular candidate's owner has uploaded a bad KYC. // On securing 75% votes against an owner ( not candidate ), owner & all its candidates will lose their funds. function voteInvalidKYC( - address _invalidCandidate - ) - public - onlyValidCandidate(msg.sender) - onlyValidCandidate(_invalidCandidate) - { + address _owner + ) public onlyValidCandidate(msg.sender) { address candidateOwner = getCandidateOwner(msg.sender); - address _invalidMasternode = getCandidateOwner(_invalidCandidate); - require( - !hasVotedInvalid[candidateOwner][_invalidMasternode], - "Already Voted Invalid" - ); - hasVotedInvalid[candidateOwner][_invalidMasternode] = true; - invalidKYCCount[_invalidMasternode]++; - if ( - (invalidKYCCount[_invalidMasternode] * 100) / getOwnerCount() >= 75 - ) { + + require(!hasVotedInvalid[candidateOwner][_owner], "Already voted"); + hasVotedInvalid[candidateOwner][_owner] = true; + invalidKYCCount[_owner] += 1; + if ((invalidKYCCount[_owner] * 100) / getOwnerCount() >= 75) { // 75% owners say that the KYC is invalid - address[] memory allMasternodes = new address[]( - candidates.length - 1 - ); - uint256 count = 0; - for (uint256 i = 0; i < candidates.length; i++) { - if (getCandidateOwner(candidates[i]) == _invalidMasternode) { - // logic to remove cap. - - allMasternodes[count++] = candidates[i]; - delete candidates[i]; - - delete validatorsState[candidates[i]]; - delete kycString[_invalidMasternode]; - delete ownerToCandidate[_invalidMasternode]; - delete invalidKYCCount[_invalidMasternode]; + invalidOwner[_owner] = true; + + (bool isOwnerNow, uint ownerIndex) = isOwner(_owner); + if (isOwnerNow) { + uint j = 0; + uint count = 0; + address[] memory allMasternodes = new address[]( + candidates.length + ); + address[] memory newCandidates = new address[]( + candidates.length + ); + + for (uint i = 0; i < candidates.length; i++) { + address candidate = candidates[i]; + if (getCandidateOwner(candidate) == _owner) { + // logic to remove cap. + candidateCount = candidateCount.sub(1); + allMasternodes[count++] = candidate; + invalidCandidate[candidate] = true; + delete validatorsState[candidate]; + delete ownerToCandidate[_owner]; + delete invalidKYCCount[_owner]; + } else { + newCandidates[j++] = candidate; + } } - } - candidates = removeZeroAddresses(candidates); - checkMinCandidateNum(); - for (uint256 k = 0; k < owners.length; k++) { - if (owners[k] == _invalidMasternode) { - delete owners[k]; - break; + // Resize the array. + assembly { + mstore(newCandidates, j) + mstore(allMasternodes, count) } + candidates = newCandidates; + + removeOwnerByIndex(ownerIndex); + emit InvalidatedNode(_owner, allMasternodes); } - owners = removeZeroAddresses(owners); - emit InvalidatedNode(_invalidMasternode, allMasternodes); } } // invalidPercent : get votes against an owner in percentage. function invalidPercent( - address _invalidCandidate - ) public view onlyValidCandidate(_invalidCandidate) returns (uint256) { - address _invalidMasternode = getCandidateOwner(_invalidCandidate); - return ((invalidKYCCount[_invalidMasternode] * 100) / getOwnerCount()); + address _owner + ) public view onlyValidCandidate(_owner) returns (uint) { + return ((invalidKYCCount[_owner] * 100) / getOwnerCount()); } // getOwnerCount : get count of total owners; accounts who own atleast one masternode. - function getOwnerCount() public view returns (uint256) { - return owners.length; - } - - // getKYC : get KYC uploaded of the owner of the given masternode or the owner themselves - function getLatestKYC( - address _address - ) public view returns (string memory) { - if (isCandidate(_address)) { - return - kycString[getCandidateOwner(_address)][ - kycString[getCandidateOwner(_address)].length - 1 - ]; - } else { - return kycString[_address][kycString[_address].length - 1]; - } - } - - function getHashCount(address _address) public view returns (uint256) { - return kycString[_address].length; + function getOwnerCount() public view returns (uint) { + return ownerCount; } function withdraw( uint256 _blockNumber, - uint256 _index + uint _index ) public onlyValidWithdraw(_blockNumber, _index) { uint256 cap = withdrawsState[msg.sender].caps[_blockNumber]; delete withdrawsState[msg.sender].caps[_blockNumber]; delete withdrawsState[msg.sender].blockNumbers[_index]; - (msg.sender).transfer(cap); + msg.sender.transfer(cap); emit Withdraw(msg.sender, _blockNumber, cap); } - function getOwnerToCandidateLength( - address _address - ) external view returns (uint256) { - return ownerToCandidate[_address].length; - } - - function candidateCount() public view returns (uint256) { - return candidates.length; - } - function removeZeroAddresses( address[] memory addresses ) private pure returns (address[] memory) { @@ -431,4 +416,88 @@ contract XDCValidator { } return newAddresses; } + + function removeCandidatesZeroAddresses() external { + address[] memory newAddresses = new address[](candidates.length); + uint256 j = 0; + for (uint256 i = 0; i < candidates.length; i++) { + if (candidates[i] != address(0)) { + newAddresses[j] = candidates[i]; + j++; + } + } + // Resize the array. + assembly { + mstore(newAddresses, j) + } + candidates = newAddresses; + } + + function removeOwnersZeroAddresses() external { + address[] memory newAddresses = new address[](owners.length); + uint256 j = 0; + for (uint256 i = 0; i < owners.length; i++) { + if (owners[i] != address(0)) { + newAddresses[j] = owners[i]; + j++; + } + } + // Resize the array. + assembly { + mstore(newAddresses, j) + } + owners = newAddresses; + } + + // Efficiently remove _candidate from the candidates array + function deleteCandidate(address candidate) private { + uint256 candidatesLength = candidates.length; + for (uint256 i = 0; i < candidatesLength; i++) { + if (candidates[i] == candidate) { + candidates[i] = candidates[candidatesLength - 1]; + delete candidates[candidatesLength - 1]; + candidates.length--; // Manually decrease the array length + break; + } + } + } + + // Efficiently remove the invalid owner from the owners array + function deleteOwner(address owner) private { + uint256 ownersLength = owners.length; + for (uint k = 0; k < ownersLength; k++) { + if (owners[k] == owner) { + owners[k] = owners[ownersLength - 1]; // Swap with the last element + delete owners[ownersLength - 1]; // Delete the last element + owners.length--; // Decrease the array size + ownerCount--; // Decrease the owner count + break; + } + } + } + + // isOwner : check if the given address is an owner or not. + function isOwner(address owner) public view returns (bool, uint256) { + for (uint i = 0; i < owners.length; i++) { + if (owners[i] == owner) { + return (true, i); + } + } + return (false, 0); + } + + function removeOwnerByIndex(uint256 index) private { + // no need to check: index <= lastIndex + uint256 lastIndex = owners.length - 1; + owners[index] = owners[lastIndex]; + delete owners[lastIndex]; + owners.length--; + ownerCount--; + } + + function getOwnerToCandidateLength( + address _address + ) external view returns (uint256) { + return ownerToCandidate[_address].length; + } } diff --git a/contracts/validator/src/contracts/XDCValidatorOld.sol b/contracts/validator/src/contracts/XDCValidatorOld.sol new file mode 100644 index 000000000..cd162871e --- /dev/null +++ b/contracts/validator/src/contracts/XDCValidatorOld.sol @@ -0,0 +1,434 @@ +// SPDX-License-Identifier: MIT +pragma solidity =0.4.26; + +import {SafeMath} from "./libraries/SafeMath.sol"; + +contract XDCValidator { + using SafeMath for uint256; + + event Vote(address _voter, address _candidate, uint256 _cap); + event Unvote(address _voter, address _candidate, uint256 _cap); + event Propose(address _owner, address _candidate, uint256 _cap); + event Resign(address _owner, address _candidate); + event Withdraw(address _owner, uint256 _blockNumber, uint256 _cap); + event UploadedKYC(address _owner, string kycHash); + event InvalidatedNode(address _masternodeOwner, address[] _masternodes); + + struct ValidatorState { + address owner; + bool isCandidate; + uint256 cap; + mapping(address => uint256) voters; + } + + struct WithdrawState { + mapping(uint256 => uint256) caps; + uint256[] blockNumbers; + } + + mapping(address => WithdrawState) private withdrawsState; + + mapping(address => ValidatorState) public validatorsState; + mapping(address => address[]) public voters; + + // Mapping structures added for KYC feature. + mapping(address => string[]) public kycString; + mapping(address => uint256) public invalidKYCCount; + mapping(address => mapping(address => bool)) public hasVotedInvalid; + mapping(address => address[]) public ownerToCandidate; + address[] public owners; + + address[] public candidates; + + uint256 public minCandidateNum; + uint256 public minCandidateCap; + uint256 public minVoterCap; + uint256 public maxValidatorNumber; + uint256 public candidateWithdrawDelay; + uint256 public voterWithdrawDelay; + + address[] public grandMasters; + mapping(address => bool) public grandMasterMap; + + modifier onlyValidCandidateCap() { + // anyone can deposit X XDC to become a candidate + require(msg.value >= minCandidateCap, "Low Candidate Cap"); + _; + } + + modifier onlyValidVoterCap() { + require(msg.value >= minVoterCap, "Low Voter Cap"); + _; + } + + modifier onlyKYCWhitelisted() { + require( + kycString[msg.sender].length != 0 || + ownerToCandidate[msg.sender].length > 0, + "Not KYC Whitelisted" + ); + _; + } + + modifier onlyOwner(address _candidate) { + require(validatorsState[_candidate].owner == msg.sender, "Not Owner"); + _; + } + + modifier onlyCandidate(address _candidate) { + require(validatorsState[_candidate].isCandidate, "Not Candidate"); + _; + } + + modifier onlyValidCandidate(address _candidate) { + require(validatorsState[_candidate].isCandidate, "Not Valid Candidate"); + _; + } + + modifier onlyNotCandidate(address _candidate) { + require(!validatorsState[_candidate].isCandidate, "Already Candidate"); + _; + } + + modifier onlyValidVote(address _candidate, uint256 _cap) { + require( + validatorsState[_candidate].voters[msg.sender] >= _cap, + "Insufficient Vote Cap" + ); + if (validatorsState[_candidate].owner == msg.sender) { + require( + validatorsState[_candidate].voters[msg.sender].sub(_cap) >= + minCandidateCap, + "Below Min Cap" + ); + } + _; + } + + modifier onlyValidWithdraw(uint256 _blockNumber, uint256 _index) { + require(_blockNumber > 0, "Invalid Block Number"); + require(block.number >= _blockNumber, "Block Number Too High"); + require( + withdrawsState[msg.sender].caps[_blockNumber] > 0, + "Invalid Withdraw Cap" + ); + require( + withdrawsState[msg.sender].blockNumbers[_index] == _blockNumber, + "Mismatch Block Number" + ); + _; + } + + modifier onlyGrandMaster() { + require(grandMasterMap[msg.sender] == true, "Not Grand Master"); + _; + } + + constructor( + address[] memory _candidates, + uint256[] memory _caps, + address _firstOwner, + uint256 _minCandidateCap, + uint256 _minVoterCap, + uint256 _maxValidatorNumber, + uint256 _candidateWithdrawDelay, + uint256 _voterWithdrawDelay, + address[] memory _grandMasters, + uint256 _minCandidateNum + ) public { + minCandidateNum = _minCandidateNum; + minCandidateCap = _minCandidateCap; + minVoterCap = _minVoterCap; + maxValidatorNumber = _maxValidatorNumber; + candidateWithdrawDelay = _candidateWithdrawDelay; + voterWithdrawDelay = _voterWithdrawDelay; + owners.push(_firstOwner); + for (uint256 i = 0; i < _candidates.length; i++) { + candidates.push(_candidates[i]); + ValidatorState storage vs = validatorsState[_candidates[i]]; + vs.owner = _firstOwner; + vs.isCandidate = true; + vs.cap = _caps[i]; + voters[_candidates[i]].push(_firstOwner); + ownerToCandidate[_firstOwner].push(_candidates[i]); + validatorsState[_candidates[i]].voters[_firstOwner] = _caps[i]; + } + for (i = 0; i < _grandMasters.length; i++) { + grandMasters.push(_grandMasters[i]); + grandMasterMap[_grandMasters[i]] = true; + } + } + + // uploadKYC : anyone can upload a KYC; its not equivalent to becoming an owner. + function uploadKYC(string kychash) external { + kycString[msg.sender].push(kychash); + emit UploadedKYC(msg.sender, kychash); + } + + // propose : any non-candidate who has uploaded its KYC can become an owner by proposing a candidate. + function propose( + address _candidate + ) + external + payable + onlyValidCandidateCap + onlyNotCandidate(_candidate) + onlyGrandMaster + { + uint256 cap = validatorsState[_candidate].cap.add(msg.value); + candidates.push(_candidate); + ValidatorState storage vs = validatorsState[_candidate]; + vs.owner = msg.sender; + vs.isCandidate = true; + vs.cap = cap; + validatorsState[_candidate].voters[msg.sender] = validatorsState[ + _candidate + ].voters[msg.sender].add(msg.value); + + if (ownerToCandidate[msg.sender].length == 0) { + owners.push(msg.sender); + } + ownerToCandidate[msg.sender].push(_candidate); + voters[_candidate].push(msg.sender); + emit Propose(msg.sender, _candidate, msg.value); + } + + function vote( + address _candidate + ) + external + payable + onlyValidVoterCap + onlyValidCandidate(_candidate) + onlyGrandMaster + { + validatorsState[_candidate].cap = validatorsState[_candidate].cap.add( + msg.value + ); + if (validatorsState[_candidate].voters[msg.sender] == 0) { + voters[_candidate].push(msg.sender); + } + validatorsState[_candidate].voters[msg.sender] = validatorsState[ + _candidate + ].voters[msg.sender].add(msg.value); + emit Vote(msg.sender, _candidate, msg.value); + } + + function getCandidates() public view returns (address[] memory) { + return candidates; + } + + function getGrandMasters() public view returns (address[] memory) { + return grandMasters; + } + + function getCandidateCap(address _candidate) public view returns (uint256) { + return validatorsState[_candidate].cap; + } + + function getCandidateOwner( + address _candidate + ) public view returns (address) { + return validatorsState[_candidate].owner; + } + + function getVoterCap( + address _candidate, + address _voter + ) public view returns (uint256) { + return validatorsState[_candidate].voters[_voter]; + } + + function getVoters( + address _candidate + ) public view returns (address[] memory) { + return voters[_candidate]; + } + + function isCandidate(address _candidate) public view returns (bool) { + return validatorsState[_candidate].isCandidate; + } + + function getWithdrawBlockNumbers() public view returns (uint256[] memory) { + return withdrawsState[msg.sender].blockNumbers; + } + + function getWithdrawCap( + uint256 _blockNumber + ) public view returns (uint256) { + return withdrawsState[msg.sender].caps[_blockNumber]; + } + + function unvote( + address _candidate, + uint256 _cap + ) public onlyValidVote(_candidate, _cap) { + validatorsState[_candidate].cap = validatorsState[_candidate].cap.sub( + _cap + ); + validatorsState[_candidate].voters[msg.sender] = validatorsState[ + _candidate + ].voters[msg.sender].sub(_cap); + + // refund after delay X blocks + uint256 withdrawBlockNumber = voterWithdrawDelay.add(block.number); + withdrawsState[msg.sender].caps[withdrawBlockNumber] = withdrawsState[ + msg.sender + ].caps[withdrawBlockNumber].add(_cap); + withdrawsState[msg.sender].blockNumbers.push(withdrawBlockNumber); + + emit Unvote(msg.sender, _candidate, _cap); + } + + function resign( + address _candidate + ) public onlyOwner(_candidate) onlyCandidate(_candidate) { + validatorsState[_candidate].isCandidate = false; + for (uint256 i = 0; i < candidates.length; i++) { + if (candidates[i] == _candidate) { + delete candidates[i]; + break; + } + } + candidates = removeZeroAddresses(candidates); + checkMinCandidateNum(); + uint256 cap = validatorsState[_candidate].voters[msg.sender]; + validatorsState[_candidate].cap = validatorsState[_candidate].cap.sub( + cap + ); + validatorsState[_candidate].voters[msg.sender] = 0; + // refunding after resigning X blocks + uint256 withdrawBlockNumber = candidateWithdrawDelay.add(block.number); + withdrawsState[msg.sender].caps[withdrawBlockNumber] = withdrawsState[ + msg.sender + ].caps[withdrawBlockNumber].add(cap); + withdrawsState[msg.sender].blockNumbers.push(withdrawBlockNumber); + emit Resign(msg.sender, _candidate); + } + + function checkMinCandidateNum() private view { + require(candidates.length >= minCandidateNum, "Low Candidate Count"); + } + + // voteInvalidKYC : any candidate can vote for invalid KYC i.e. a particular candidate's owner has uploaded a bad KYC. + // On securing 75% votes against an owner ( not candidate ), owner & all its candidates will lose their funds. + function voteInvalidKYC( + address _invalidCandidate + ) + public + onlyValidCandidate(msg.sender) + onlyValidCandidate(_invalidCandidate) + { + address candidateOwner = getCandidateOwner(msg.sender); + address _invalidMasternode = getCandidateOwner(_invalidCandidate); + require( + !hasVotedInvalid[candidateOwner][_invalidMasternode], + "Already Voted Invalid" + ); + hasVotedInvalid[candidateOwner][_invalidMasternode] = true; + invalidKYCCount[_invalidMasternode]++; + if ( + (invalidKYCCount[_invalidMasternode] * 100) / getOwnerCount() >= 75 + ) { + // 75% owners say that the KYC is invalid + address[] memory allMasternodes = new address[]( + candidates.length - 1 + ); + uint256 count = 0; + for (uint256 i = 0; i < candidates.length; i++) { + if (getCandidateOwner(candidates[i]) == _invalidMasternode) { + // logic to remove cap. + + allMasternodes[count++] = candidates[i]; + delete candidates[i]; + + delete validatorsState[candidates[i]]; + delete kycString[_invalidMasternode]; + delete ownerToCandidate[_invalidMasternode]; + delete invalidKYCCount[_invalidMasternode]; + } + } + candidates = removeZeroAddresses(candidates); + checkMinCandidateNum(); + for (uint256 k = 0; k < owners.length; k++) { + if (owners[k] == _invalidMasternode) { + delete owners[k]; + + break; + } + } + owners = removeZeroAddresses(owners); + emit InvalidatedNode(_invalidMasternode, allMasternodes); + } + } + + // invalidPercent : get votes against an owner in percentage. + function invalidPercent( + address _invalidCandidate + ) public view onlyValidCandidate(_invalidCandidate) returns (uint256) { + address _invalidMasternode = getCandidateOwner(_invalidCandidate); + return ((invalidKYCCount[_invalidMasternode] * 100) / getOwnerCount()); + } + + // getOwnerCount : get count of total owners; accounts who own atleast one masternode. + function getOwnerCount() public view returns (uint256) { + return owners.length; + } + + // getKYC : get KYC uploaded of the owner of the given masternode or the owner themselves + function getLatestKYC( + address _address + ) public view returns (string memory) { + if (isCandidate(_address)) { + return + kycString[getCandidateOwner(_address)][ + kycString[getCandidateOwner(_address)].length - 1 + ]; + } else { + return kycString[_address][kycString[_address].length - 1]; + } + } + + function getHashCount(address _address) public view returns (uint256) { + return kycString[_address].length; + } + + function withdraw( + uint256 _blockNumber, + uint256 _index + ) public onlyValidWithdraw(_blockNumber, _index) { + uint256 cap = withdrawsState[msg.sender].caps[_blockNumber]; + delete withdrawsState[msg.sender].caps[_blockNumber]; + delete withdrawsState[msg.sender].blockNumbers[_index]; + (msg.sender).transfer(cap); + emit Withdraw(msg.sender, _blockNumber, cap); + } + + function getOwnerToCandidateLength( + address _address + ) external view returns (uint256) { + return ownerToCandidate[_address].length; + } + + function candidateCount() public view returns (uint256) { + return candidates.length; + } + + function removeZeroAddresses( + address[] memory addresses + ) private pure returns (address[] memory) { + address[] memory newAddresses = new address[](addresses.length); + uint256 j = 0; + for (uint256 i = 0; i < addresses.length; i++) { + if (addresses[i] != address(0)) { + newAddresses[j] = addresses[i]; + j++; + } + } + // Resize the array. + assembly { + mstore(newAddresses, j) + } + return newAddresses; + } +} From db0c1544a9d4f777d01ba5b7b53e40e09ba233e4 Mon Sep 17 00:00:00 2001 From: Galaxy <30950645+GalaxySciTech@users.noreply.github.com> Date: Sun, 4 Aug 2024 09:40:21 +0400 Subject: [PATCH 02/12] Update XDCValidator.sol --- contracts/validator/src/contracts/XDCValidator.sol | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/contracts/validator/src/contracts/XDCValidator.sol b/contracts/validator/src/contracts/XDCValidator.sol index 365c21ba8..ec12b9696 100644 --- a/contracts/validator/src/contracts/XDCValidator.sol +++ b/contracts/validator/src/contracts/XDCValidator.sol @@ -41,6 +41,7 @@ contract XDCValidator { uint256 public candidateCount = 0; uint256 public ownerCount = 0; + uint256 public minCandidateNum; uint256 public minCandidateCap; uint256 public minVoterCap; uint256 public maxValidatorNumber; @@ -147,6 +148,7 @@ contract XDCValidator { address[] memory _grandMasters, uint256 _minCandidateNum ) public { + minCandidateNum = _minCandidateNum; minCandidateCap = _minCandidateCap; minVoterCap = _minVoterCap; maxValidatorNumber = _maxValidatorNumber; @@ -291,6 +293,8 @@ contract XDCValidator { deleteCandidate(_candidate); + checkMinCandidateNum(); + // Cleanup the ownerToCandidate mapping for the resigning candidate's owner address[] storage ownedCandidates = ownerToCandidate[msg.sender]; uint256 ownedCandidatesLength = ownedCandidates.length; @@ -370,6 +374,8 @@ contract XDCValidator { } candidates = newCandidates; + checkMinCandidateNum(); + removeOwnerByIndex(ownerIndex); emit InvalidatedNode(_owner, allMasternodes); } @@ -500,4 +506,8 @@ contract XDCValidator { ) external view returns (uint256) { return ownerToCandidate[_address].length; } + + function checkMinCandidateNum() private view { + require(candidates.length >= minCandidateNum, "Low Candidate Count"); + } } From 705c2debd3bb421b7153a2d854a2fc304547c510 Mon Sep 17 00:00:00 2001 From: Galaxy <30950645+GalaxySciTech@users.noreply.github.com> Date: Sun, 4 Aug 2024 21:19:19 +0400 Subject: [PATCH 03/12] Update XDCValidatorOld.sol --- contracts/validator/src/contracts/XDCValidatorOld.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/validator/src/contracts/XDCValidatorOld.sol b/contracts/validator/src/contracts/XDCValidatorOld.sol index cd162871e..dfdb3acfb 100644 --- a/contracts/validator/src/contracts/XDCValidatorOld.sol +++ b/contracts/validator/src/contracts/XDCValidatorOld.sol @@ -3,7 +3,7 @@ pragma solidity =0.4.26; import {SafeMath} from "./libraries/SafeMath.sol"; -contract XDCValidator { +contract XDCValidatorOld { using SafeMath for uint256; event Vote(address _voter, address _candidate, uint256 _cap); From 09a204937333945c678eb1ae3b87736d02ee34f4 Mon Sep 17 00:00:00 2001 From: Galaxy <30950645+GalaxySciTech@users.noreply.github.com> Date: Mon, 5 Aug 2024 10:41:08 +0400 Subject: [PATCH 04/12] Update xdcValidator.js --- contracts/validator/src/test/xdcValidator.js | 1 - 1 file changed, 1 deletion(-) diff --git a/contracts/validator/src/test/xdcValidator.js b/contracts/validator/src/test/xdcValidator.js index 302158e53..7575fa245 100644 --- a/contracts/validator/src/test/xdcValidator.js +++ b/contracts/validator/src/test/xdcValidator.js @@ -112,7 +112,6 @@ describe("XDCValidator", () => { expect(candidatesBefore).to.deep.eq(before); expect(candidates).to.deep.eq(deploy["candidates"]); expect(voters).to.include(master); - expect(ownerToCandidates).to.include(candidate); expect(validatorsState["owner"]).to.eq(master); expect(validatorsState["isCandidate"]).to.eq(false); expect(validatorsState["cap"]).to.eq(0); From a0484658165aa2f63f9cf20d74fbc511a00516a0 Mon Sep 17 00:00:00 2001 From: Galaxy <30950645+GalaxySciTech@users.noreply.github.com> Date: Mon, 5 Aug 2024 10:47:08 +0400 Subject: [PATCH 05/12] update --- contracts/validator/contract/validator.go | 293 ++++++++++++---------- contracts/validator/src/abi | 134 +++++----- contracts/validator/src/bytecode | 2 +- 3 files changed, 229 insertions(+), 200 deletions(-) diff --git a/contracts/validator/contract/validator.go b/contracts/validator/contract/validator.go index c372dc7ab..2f783cd77 100644 --- a/contracts/validator/contract/validator.go +++ b/contracts/validator/contract/validator.go @@ -16,10 +16,10 @@ import ( ) // XDCValidatorABI is the input ABI used to generate the binding from. -const XDCValidatorABI = "[{\"constant\":false,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"propose\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"owners\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"},{\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"unvote\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCandidates\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasVotedInvalid\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"getWithdrawCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"kycString\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"ownerToCandidate\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"getVoters\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getWithdrawBlockNumbers\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"},{\"name\":\"_voter\",\"type\":\"address\"}],\"name\":\"getVoterCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"getLatestKYC\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"candidates\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"validatorsState\",\"outputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"isCandidate\",\"type\":\"bool\"},{\"name\":\"cap\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_blockNumber\",\"type\":\"uint256\"},{\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minCandidateNum\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getGrandMasters\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"getCandidateCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"grandMasterMap\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_invalidCandidate\",\"type\":\"address\"}],\"name\":\"invalidPercent\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"voters\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"grandMasters\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"getOwnerToCandidateLength\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"vote\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"invalidKYCCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"candidateCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"voterWithdrawDelay\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"resign\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"getCandidateOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"getHashCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"maxValidatorNumber\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"candidateWithdrawDelay\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"isCandidate\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minCandidateCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getOwnerCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_invalidCandidate\",\"type\":\"address\"}],\"name\":\"voteInvalidKYC\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"kychash\",\"type\":\"string\"}],\"name\":\"uploadKYC\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minVoterCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_candidates\",\"type\":\"address[]\"},{\"name\":\"_caps\",\"type\":\"uint256[]\"},{\"name\":\"_firstOwner\",\"type\":\"address\"},{\"name\":\"_minCandidateCap\",\"type\":\"uint256\"},{\"name\":\"_minVoterCap\",\"type\":\"uint256\"},{\"name\":\"_maxValidatorNumber\",\"type\":\"uint256\"},{\"name\":\"_candidateWithdrawDelay\",\"type\":\"uint256\"},{\"name\":\"_voterWithdrawDelay\",\"type\":\"uint256\"},{\"name\":\"_grandMasters\",\"type\":\"address[]\"},{\"name\":\"_minCandidateNum\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_voter\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_candidate\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"Vote\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_voter\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_candidate\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"Unvote\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_candidate\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"Propose\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"Resign\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_blockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"kycHash\",\"type\":\"string\"}],\"name\":\"UploadedKYC\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_masternodeOwner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_masternodes\",\"type\":\"address[]\"}],\"name\":\"InvalidatedNode\",\"type\":\"event\"}]" +const XDCValidatorABI = "[{\"constant\":false,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"propose\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"owners\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"},{\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"unvote\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCandidates\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"removeCandidatesZeroAddresses\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ownerCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasVotedInvalid\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"getWithdrawCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"ownerToCandidate\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"getVoters\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"isOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getWithdrawBlockNumbers\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"},{\"name\":\"_voter\",\"type\":\"address\"}],\"name\":\"getVoterCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"candidates\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"validatorsState\",\"outputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"isCandidate\",\"type\":\"bool\"},{\"name\":\"cap\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_blockNumber\",\"type\":\"uint256\"},{\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minCandidateNum\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"getCandidateCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"grandMasterMap\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"invalidPercent\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"voters\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"grandMasters\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"getOwnerToCandidateLength\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"removeOwnersZeroAddresses\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"vote\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"invalidKYCCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"candidateCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"voterWithdrawDelay\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"resign\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"invalidCandidate\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"getCandidateOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"maxValidatorNumber\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"candidateWithdrawDelay\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"isCandidate\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minCandidateCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"invalidOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getOwnerCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"voteInvalidKYC\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minVoterCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_candidates\",\"type\":\"address[]\"},{\"name\":\"_caps\",\"type\":\"uint256[]\"},{\"name\":\"_firstOwner\",\"type\":\"address\"},{\"name\":\"_minCandidateCap\",\"type\":\"uint256\"},{\"name\":\"_minVoterCap\",\"type\":\"uint256\"},{\"name\":\"_maxValidatorNumber\",\"type\":\"uint256\"},{\"name\":\"_candidateWithdrawDelay\",\"type\":\"uint256\"},{\"name\":\"_voterWithdrawDelay\",\"type\":\"uint256\"},{\"name\":\"_grandMasters\",\"type\":\"address[]\"},{\"name\":\"_minCandidateNum\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_voter\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_candidate\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"Vote\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_voter\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_candidate\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"Unvote\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_candidate\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"Propose\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"Resign\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_blockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"kycHash\",\"type\":\"string\"}],\"name\":\"UploadedKYC\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_masternodeOwner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_masternodes\",\"type\":\"address[]\"}],\"name\":\"InvalidatedNode\",\"type\":\"event\"}]" // XDCValidatorBin is the compiled bytecode used for deploying new contracts. -const XDCValidatorBin = `0x60806040523480156200001157600080fd5b50604051620028bb380380620028bb83398101604090815281516020830151918301516060840151608085015160a086015160c087015160e08801516101008901516101208a01516009819055600a879055600b869055600c859055600d849055600e8390556007805460018101825560009182527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688018054600160a060020a031916600160a060020a038b16179055988b019a998a01999798969795969495939492939190910191805b8b51821015620002e85760088c83815181101515620000f757fe5b6020908102919091018101518254600180820185556000948552928420018054600160a060020a031916600160a060020a039092169190911790558d519091908e90859081106200014457fe5b6020908102909101810151600160a060020a03908116835290820192909252604001600020805460a060020a60ff0219928d16600160a060020a03199091161791909116740100000000000000000000000000000000000000001781558b519091508b9083908110620001b357fe5b906020019060200201518160010181905550600260008d84815181101515620001d857fe5b6020908102909101810151600160a060020a03908116835282820193909352604091820160009081208054600181018255908252828220018054948f16600160a060020a0319909516851790559283526006905290208c518d90849081106200023d57fe5b6020908102919091018101518254600181018455600093845291909220018054600160a060020a031916600160a060020a039092169190911790558a518b90839081106200028757fe5b90602001906020020151600160008e85815181101515620002a457fe5b6020908102909101810151600160a060020a0390811683528282019390935260409182016000908120938f16815260029093019052902055600190910190620000dc565b600091505b83518210156200039657600f84838151811015156200030857fe5b6020908102919091018101518254600180820185556000948552928420018054600160a060020a031916600160a060020a03909216919091179055855190916010918790869081106200035757fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff191691151591909117905560019190910190620002ed565b50505050505050505050505061250980620003b26000396000f3006080604052600436106101d75763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630126795181146101dc578063025e7c27146101f257806302aa9be21461022657806306a49fce1461024a5780630e3e4fb8146102af57806315febd68146102ea57806327a6296b146103145780632a3640b1146103ad5780632d15cc04146103d15780632f9c4bba146103f2578063302b687214610407578063326586521461042e5780633477ee2e1461044f5780634110a48914610467578063441a3e70146104b057806349e971be146104cb57806352b3ed16146104e057806358e7525f146104f55780635b6e3963146105165780635b860d27146105375780635c134d66146105585780636132cd831461057c57806367134e70146105945780636dd7d8ea146105b557806372e44a38146105c9578063a9a981a3146105ea578063a9ff959e146105ff578063ae6e43f514610614578063b642facd14610635578063c45607df14610656578063d09f1ab414610677578063d161c7671461068c578063d51b9e93146106a1578063d55b7dff146106c2578063ef18374a146106d7578063f2ee3c7d146106ec578063f5c951251461070d578063f8ac9dd51461072d575b600080fd5b6101f0600160a060020a0360043516610742565b005b3480156101fe57600080fd5b5061020a600435610a7e565b60408051600160a060020a039092168252519081900360200190f35b34801561023257600080fd5b506101f0600160a060020a0360043516602435610aa6565b34801561025657600080fd5b5061025f610d32565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561029b578181015183820152602001610283565b505050509050019250505060405180910390f35b3480156102bb57600080fd5b506102d6600160a060020a0360043581169060243516610d95565b604080519115158252519081900360200190f35b3480156102f657600080fd5b50610302600435610db5565b60408051918252519081900360200190f35b34801561032057600080fd5b50610338600160a060020a0360043516602435610dd4565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561037257818101518382015260200161035a565b50505050905090810190601f16801561039f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103b957600080fd5b5061020a600160a060020a0360043516602435610e8a565b3480156103dd57600080fd5b5061025f600160a060020a0360043516610ec1565b3480156103fe57600080fd5b5061025f610f37565b34801561041357600080fd5b50610302600160a060020a0360043581169060243516610f98565b34801561043a57600080fd5b50610338600160a060020a0360043516610fc7565b34801561045b57600080fd5b5061020a6004356110fd565b34801561047357600080fd5b50610488600160a060020a036004351661110b565b60408051600160a060020a039094168452911515602084015282820152519081900360600190f35b3480156104bc57600080fd5b506101f060043560243561113a565b3480156104d757600080fd5b50610302611396565b3480156104ec57600080fd5b5061025f61139c565b34801561050157600080fd5b50610302600160a060020a03600435166113fc565b34801561052257600080fd5b506102d6600160a060020a036004351661141b565b34801561054357600080fd5b50610302600160a060020a0360043516611430565b34801561056457600080fd5b5061020a600160a060020a03600435166024356114dc565b34801561058857600080fd5b5061020a6004356114f7565b3480156105a057600080fd5b50610302600160a060020a0360043516611505565b6101f0600160a060020a0360043516611520565b3480156105d557600080fd5b50610302600160a060020a036004351661178e565b3480156105f657600080fd5b506103026117a0565b34801561060b57600080fd5b506103026117a6565b34801561062057600080fd5b506101f0600160a060020a03600435166117ac565b34801561064157600080fd5b5061020a600160a060020a0360043516611b02565b34801561066257600080fd5b50610302600160a060020a0360043516611b20565b34801561068357600080fd5b50610302611b3b565b34801561069857600080fd5b50610302611b41565b3480156106ad57600080fd5b506102d6600160a060020a0360043516611b47565b3480156106ce57600080fd5b50610302611b6c565b3480156106e357600080fd5b50610302611b72565b3480156106f857600080fd5b506101f0600160a060020a0360043516611b78565b34801561071957600080fd5b506101f0600480356024810191013561211d565b34801561073957600080fd5b506103026121aa565b600080600a5434101515156107a1576040805160e560020a62461bcd02815260206004820152601160248201527f4c6f772043616e64696461746520436170000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038316600090815260016020526040902054839060a060020a900460ff161561081b576040805160e560020a62461bcd02815260206004820152601160248201527f416c72656164792043616e646964617465000000000000000000000000000000604482015290519081900360640190fd5b3360009081526010602052604090205460ff161515600114610887576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f74204772616e64204d617374657200000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038416600090815260016020819052604090912001546108b4903463ffffffff6121b016565b6008805460018181019092557ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3018054600160a060020a038816600160a060020a03199182168117909255600091825260208381526040808420805474ff0000000000000000000000000000000000000000199416339081179490941660a060020a1781559485018690559183526002840190529020549194509250610960903463ffffffff6121b016565b600160a060020a038516600090815260016020908152604080832033845260020182528083209390935560069052205415156109d957600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688018054600160a060020a031916331790555b336000818152600660209081526040808320805460018181018355918552838520018054600160a060020a038b16600160a060020a031991821681179092558186526002855283862080549384018155865294849020909101805490941685179093558051938452908301919091523482820152517f7635f1d87b47fba9f2b09e56eb4be75cca030e0cb179c1602ac9261d39a8f5c19181900360600190a150505050565b6007805482908110610a8c57fe5b600091825260209091200154600160a060020a0316905081565b600160a060020a038216600090815260016020908152604080832033845260020190915281205483908390811115610b28576040805160e560020a62461bcd02815260206004820152601560248201527f496e73756666696369656e7420566f7465204361700000000000000000000000604482015290519081900360640190fd5b600160a060020a0382811660009081526001602052604090205416331415610bda57600a54600160a060020a0383166000908152600160209081526040808320338452600201909152902054610b84908363ffffffff6121c616565b1015610bda576040805160e560020a62461bcd02815260206004820152600d60248201527f42656c6f77204d696e2043617000000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03851660009081526001602081905260409091200154610c07908563ffffffff6121c616565b600160a060020a038616600090815260016020818152604080842092830194909455338352600290910190522054610c45908563ffffffff6121c616565b600160a060020a0386166000908152600160209081526040808320338452600201909152902055600e54610c7f904363ffffffff6121b016565b33600090815260208181526040808320848452909152902054909350610cab908563ffffffff6121b016565b33600081815260208181526040808320888452808352818420959095558282526001948501805495860181558352918190209093018690558051918252600160a060020a0388169282019290925280820186905290517faa0e554f781c3c3b2be110a0557f260f11af9a8aa2c64bc1e7a31dbb21e32fa29181900360600190a15050505050565b60606008805480602002602001604051908101604052809291908181526020018280548015610d8a57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610d6c575b505050505090505b90565b600560209081526000928352604080842090915290825290205460ff1681565b336000908152602081815260408083208484529091529020545b919050565b600360205281600052604060002081815481101515610def57fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152945090925090830182828015610e825780601f10610e5757610100808354040283529160200191610e82565b820191906000526020600020905b815481529060010190602001808311610e6557829003601f168201915b505050505081565b600660205281600052604060002081815481101515610ea557fe5b600091825260209091200154600160a060020a03169150829050565b600160a060020a038116600090815260026020908152604091829020805483518184028101840190945280845260609392830182828015610f2b57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610f0d575b50505050509050919050565b3360009081526020818152604091829020600101805483518184028101840190945280845260609392830182828015610d8a57602002820191906000526020600020905b815481526020019060010190808311610f7b575050505050905090565b600160a060020a0391821660009081526001602090815260408083209390941682526002909201909152205490565b6060610fd282611b47565b156110d55760036000610fe484611b02565b600160a060020a0316600160a060020a0316815260200190815260200160002060016003600061101386611b02565b600160a060020a03168152602081019190915260400160002054825491900390811061103b57fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156110c95780601f1061109e576101008083540402835291602001916110c9565b820191906000526020600020905b8154815290600101906020018083116110ac57829003601f168201915b50505050509050610dcf565b600160a060020a03821660009081526003602052604090208054600019810190811061103b57fe5b6008805482908110610a8c57fe5b60016020819052600091825260409091208054910154600160a060020a0382169160a060020a900460ff169083565b60008282828211611195576040805160e560020a62461bcd02815260206004820152601460248201527f496e76616c696420426c6f636b204e756d626572000000000000000000000000604482015290519081900360640190fd5b438211156111ed576040805160e560020a62461bcd02815260206004820152601560248201527f426c6f636b204e756d62657220546f6f20486967680000000000000000000000604482015290519081900360640190fd5b336000908152602081815260408083208584529091528120541161125b576040805160e560020a62461bcd02815260206004820152601460248201527f496e76616c696420576974686472617720436170000000000000000000000000604482015290519081900360640190fd5b33600090815260208190526040902060010180548391908390811061127c57fe5b90600052602060002001541415156112de576040805160e560020a62461bcd02815260206004820152601560248201527f4d69736d6174636820426c6f636b204e756d6265720000000000000000000000604482015290519081900360640190fd5b336000818152602081815260408083208984528083529083208054908490559383529190526001018054919450908590811061131657fe5b60009182526020822001819055604051339185156108fc02918691818181858888f1935050505015801561134e573d6000803e3d6000fd5b50604080513381526020810187905280820185905290517ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360600190a15050505050565b60095481565b6060600f805480602002602001604051908101604052809291908181526020018280548015610d8a57602002820191906000526020600020908154600160a060020a03168152600190910190602001808311610d6c575050505050905090565b600160a060020a03166000908152600160208190526040909120015490565b60106020526000908152604090205460ff1681565b600160a060020a0381166000908152600160205260408120548190839060a060020a900460ff16151561149b576040805160e560020a62461bcd02815260206004820152601360248201526000805160206124be833981519152604482015290519081900360640190fd5b6114a484611b02565b91506114ae611b72565b600160a060020a0383166000908152600460205260409020546064028115156114d357fe5b04949350505050565b600260205281600052604060002081815481101515610ea557fe5b600f805482908110610a8c57fe5b600160a060020a031660009081526006602052604090205490565b600b5434101561157a576040805160e560020a62461bcd02815260206004820152600d60248201527f4c6f7720566f7465722043617000000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038116600090815260016020526040902054819060a060020a900460ff1615156115e3576040805160e560020a62461bcd02815260206004820152601360248201526000805160206124be833981519152604482015290519081900360640190fd5b3360009081526010602052604090205460ff16151560011461164f576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f74204772616e64204d617374657200000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0382166000908152600160208190526040909120015461167c903463ffffffff6121b016565b600160a060020a03831660009081526001602081815260408084209283019490945533835260029091019052205415156116e957600160a060020a0382166000908152600260209081526040822080546001810182559083529120018054600160a060020a031916331790555b600160a060020a0382166000908152600160209081526040808320338452600201909152902054611720903463ffffffff6121b016565b600160a060020a0383166000818152600160209081526040808320338085526002909101835292819020949094558351918252810191909152348183015290517f66a9138482c99e9baf08860110ef332cc0c23b4a199a53593d8db0fc8f96fbfc9181900360600190a15050565b60046020526000908152604090205481565b60085490565b600e5481565b600160a060020a038082166000908152600160205260408120549091829182918591163314611825576040805160e560020a62461bcd02815260206004820152600960248201527f4e6f74204f776e65720000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038516600090815260016020526040902054859060a060020a900460ff1615156118a0576040805160e560020a62461bcd02815260206004820152600d60248201527f4e6f742043616e64696461746500000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0386166000908152600160205260408120805474ff00000000000000000000000000000000000000001916905594505b60085485101561194c5785600160a060020a03166008868154811015156118fa57fe5b600091825260209091200154600160a060020a0316141561194157600880548690811061192357fe5b60009182526020909120018054600160a060020a031916905561194c565b6001909401936118d7565b6119af60088054806020026020016040519081016040528092919081815260200182805480156119a557602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611987575b50505050506121d8565b80516119c3916008916020909101906122fa565b506119cc61229c565b600160a060020a038616600081815260016020818152604080842033855260028101835290842054949093528190520154909450611a10908563ffffffff6121c616565b600160a060020a0387166000908152600160208181526040808420928301949094553383526002909101905290812055600d54611a53904363ffffffff6121b016565b33600090815260208181526040808320848452909152902054909350611a7f908563ffffffff6121b016565b33600081815260208181526040808320888452808352818420959095558282526001948501805495860181558352918190209093018690558051918252600160a060020a0389169282019290925281517f4edf3e325d0063213a39f9085522994a1c44bea5f39e7d63ef61260a1e58c6d3929181900390910190a1505050505050565b600160a060020a039081166000908152600160205260409020541690565b600160a060020a031660009081526003602052604090205490565b600c5481565b600d5481565b600160a060020a031660009081526001602052604090205460a060020a900460ff1690565b600a5481565b60075490565b336000818152600160205260408120549091829160609183918291829160a060020a900460ff161515611be3576040805160e560020a62461bcd02815260206004820152601360248201526000805160206124be833981519152604482015290519081900360640190fd5b600160a060020a038816600090815260016020526040902054889060a060020a900460ff161515611c4c576040805160e560020a62461bcd02815260206004820152601360248201526000805160206124be833981519152604482015290519081900360640190fd5b611c5533611b02565b9750611c6089611b02565b600160a060020a03808a1660009081526005602090815260408083209385168352929052205490975060ff1615611ce1576040805160e560020a62461bcd02815260206004820152601560248201527f416c726561647920566f74656420496e76616c69640000000000000000000000604482015290519081900360640190fd5b600160a060020a038089166000908152600560209081526040808320938b168352928152828220805460ff19166001908117909155600490915291902080549091019055604b611d2f611b72565b600160a060020a038916600090815260046020526040902054606402811515611d5457fe5b041061211257600160088054905003604051908082528060200260200182016040528015611d8c578160200160208202803883390190505b50955060009450600093505b600854841015611f145786600160a060020a0316611dd8600886815481101515611dbe57fe5b600091825260209091200154600160a060020a0316611b02565b600160a060020a03161415611f09576008805485908110611df557fe5b60009182526020909120015486516001870196600160a060020a039092169188918110611e1e57fe5b600160a060020a039092166020928302909101909101526008805485908110611e4357fe5b600091825260208220018054600160a060020a031916905560088054600192919087908110611e6e57fe5b6000918252602080832090910154600160a060020a0390811684528382019490945260409283018220805474ffffffffffffffffffffffffffffffffffffffffff19168155600101829055928a16815260039092528120611ece9161235f565b600160a060020a0387166000908152600660205260408120611eef91612380565b600160a060020a0387166000908152600460205260408120555b600190930192611d98565b611f7560088054806020026020016040519081016040528092919081815260200182805480156119a557602002820191906000526020600020908154600160a060020a031681526001909101906020018083116119875750505050506121d8565b8051611f89916008916020909101906122fa565b50611f9261229c565b600092505b60075483101561200c5786600160a060020a0316600784815481101515611fba57fe5b600091825260209091200154600160a060020a03161415612001576007805484908110611fe357fe5b60009182526020909120018054600160a060020a031916905561200c565b600190920191611f97565b61206d60078054806020026020016040519081016040528092919081815260200182805480156119a557602002820191906000526020600020908154600160a060020a031681526001909101906020018083116119875750505050506121d8565b8051612081916007916020909101906122fa565b507fe18d61a5bf4aa2ab40afc88aa9039d27ae17ff4ec1c65f5f414df6f02ce8b35e87876040518083600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156120fd5781810151838201526020016120e5565b50505050905001935050505060405180910390a15b505050505050505050565b33600090815260036020908152604082208054600181018083559184529190922061214a9101848461239e565b50506040805133808252602082018381529282018490527f949360d814b28a3b393a68909efe1fee120ee09cac30f360a0f80ab5415a611a9290918591859190606082018484808284376040519201829003965090945050505050a15050565b600b5481565b6000828201838110156121bf57fe5b9392505050565b6000828211156121d257fe5b50900390565b6060806000808451604051908082528060200260200182016040528015612209578160200160208202803883390190505b50925060009150600090505b845181101561229357845160009086908390811061222f57fe5b60209081029091010151600160a060020a03161461228b57848181518110151561225557fe5b90602001906020020151838381518110151561226d57fe5b600160a060020a039092166020928302909101909101526001909101905b600101612215565b50815292915050565b60095460085410156122f8576040805160e560020a62461bcd02815260206004820152601360248201527f4c6f772043616e64696461746520436f756e7400000000000000000000000000604482015290519081900360640190fd5b565b82805482825590600052602060002090810192821561234f579160200282015b8281111561234f5782518254600160a060020a031916600160a060020a0390911617825560209092019160019091019061231a565b5061235b929150612418565b5090565b508054600082559060005260206000209081019061237d919061243c565b50565b508054600082559060005260206000209081019061237d919061245f565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106123df5782800160ff1982351617855561240c565b8280016001018555821561240c579182015b8281111561240c5782358255916020019190600101906123f1565b5061235b92915061245f565b610d9291905b8082111561235b578054600160a060020a031916815560010161241e565b610d9291905b8082111561235b5760006124568282612479565b50600101612442565b610d9291905b8082111561235b5760008155600101612465565b50805460018160011615610100020316600290046000825580601f1061249f575061237d565b601f01602090049060005260206000209081019061237d919061245f56004e6f742056616c69642043616e64696461746500000000000000000000000000a165627a7a7230582066e183b30548c8470ddf44cf0a263594e7a273211523d4487293ec58fc8f13880029` +const XDCValidatorBin = `0x6080604052600060085560006009553480156200001b57600080fd5b5060405162002aa238038062002aa283398101604090815281516020830151918301516060840151608085015160a086015160c087015160e08801516101008901516101208a0151600a819055600b879055600c869055600d859055600e849055600f839055978a018051600855600680546001808201835560009283527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f9091018054600160a060020a031916600160a060020a038c16179055600980549091019055909a998a01999798969795969495939492939190910191905b8a518110156200032f5760078b828151811015156200011357fe5b602090810291909101810151825460018082018555600094855293839020018054600160a060020a031916600160a060020a0392831617905560408051606081018252918d168252918101929092528b51908201908c90849081106200017557fe5b90602001906020020151815250600160008d848151811015156200019557fe5b602090810291909101810151600160a060020a03908116835282820193909352604091820160009081208551815493870151600160a060020a031990941695169490941760a060020a60ff02191674010000000000000000000000000000000000000000921515929092029190911783559201516001909101558b51600291908d90849081106200022257fe5b6020908102909101810151600160a060020a03908116835282820193909352604091820160009081208054600181018255908252828220018054948e16600160a060020a0319909516851790559283526005905290208b518c90839081106200028757fe5b6020908102919091018101518254600181018455600093845291909220018054600160a060020a031916600160a060020a0390921691909117905589518a9082908110620002d157fe5b90602001906020020151600160008d84815181101515620002ee57fe5b6020908102909101810151600160a060020a0390811683528282019390935260409182016000908120938e16815260029093019052902055600101620000f8565b5060005b8251811015620003d857601283828151811015156200034e57fe5b6020908102919091018101518254600180820185556000948552928420018054600160a060020a031916600160a060020a03909216919091179055845190916013918690859081106200039d57fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff191691151591909117905560010162000333565b50505050505050505050506126af80620003f36000396000f3006080604052600436106101e25763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630126795181146101e7578063025e7c27146101fd57806302aa9be21461023157806306a49fce146102555780630999ec79146102ba5780630db02622146102cf5780630e3e4fb8146102f657806315febd68146103315780632a3640b1146103495780632d15cc041461036d5780632f54bf6e1461038e5780632f9c4bba146103ca578063302b6872146103df5780633477ee2e146104065780634110a4891461041e578063441a3e701461046757806349e971be1461048257806358e7525f146104975780635b6e3963146104b85780635b860d27146104d95780635c134d66146104fa5780636132cd831461051e57806367134e7014610536578063681d8bf2146105575780636dd7d8ea1461056c57806372e44a3814610580578063a9a981a3146105a1578063a9ff959e146105b6578063ae6e43f5146105cb578063b622f141146105ec578063b642facd1461060d578063d09f1ab41461062e578063d161c76714610643578063d51b9e9314610658578063d55b7dff14610679578063db11daef1461068e578063ef18374a146106af578063f2ee3c7d146106c4578063f8ac9dd5146106e5575b600080fd5b6101fb600160a060020a03600435166106fa565b005b34801561020957600080fd5b50610215600435610ae7565b60408051600160a060020a039092168252519081900360200190f35b34801561023d57600080fd5b506101fb600160a060020a0360043516602435610b0f565b34801561026157600080fd5b5061026a610d9b565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102a657818101518382015260200161028e565b505050509050019250505060405180910390f35b3480156102c657600080fd5b506101fb610dfe565b3480156102db57600080fd5b506102e4610ee6565b60408051918252519081900360200190f35b34801561030257600080fd5b5061031d600160a060020a0360043581169060243516610eec565b604080519115158252519081900360200190f35b34801561033d57600080fd5b506102e4600435610f0c565b34801561035557600080fd5b50610215600160a060020a0360043516602435610f27565b34801561037957600080fd5b5061026a600160a060020a0360043516610f5e565b34801561039a57600080fd5b506103af600160a060020a0360043516610fd4565b60408051921515835260208301919091528051918290030190f35b3480156103d657600080fd5b5061026a611039565b3480156103eb57600080fd5b506102e4600160a060020a036004358116906024351661109a565b34801561041257600080fd5b506102156004356110c9565b34801561042a57600080fd5b5061043f600160a060020a03600435166110d7565b60408051600160a060020a039094168452911515602084015282820152519081900360600190f35b34801561047357600080fd5b506101fb600435602435611106565b34801561048e57600080fd5b506102e46113f1565b3480156104a357600080fd5b506102e4600160a060020a03600435166113f7565b3480156104c457600080fd5b5061031d600160a060020a0360043516611416565b3480156104e557600080fd5b506102e4600160a060020a036004351661142b565b34801561050657600080fd5b50610215600160a060020a0360043516602435611528565b34801561052a57600080fd5b50610215600435611543565b34801561054257600080fd5b506102e4600160a060020a0360043516611551565b34801561056357600080fd5b506101fb61156c565b6101fb600160a060020a036004351661164e565b34801561058c57600080fd5b506102e4600160a060020a036004351661191b565b3480156105ad57600080fd5b506102e461192d565b3480156105c257600080fd5b506102e4611933565b3480156105d757600080fd5b506101fb600160a060020a0360043516611939565b3480156105f857600080fd5b5061031d600160a060020a0360043516611d27565b34801561061957600080fd5b50610215600160a060020a0360043516611d3c565b34801561063a57600080fd5b506102e4611d5a565b34801561064f57600080fd5b506102e4611d60565b34801561066457600080fd5b5061031d600160a060020a0360043516611d66565b34801561068557600080fd5b506102e4611d8b565b34801561069a57600080fd5b5061031d600160a060020a0360043516611d91565b3480156106bb57600080fd5b506102e4611da6565b3480156106d057600080fd5b506101fb600160a060020a0360043516611dac565b3480156106f157600080fd5b506102e4612255565b600b54600090341015610757576040805160e560020a62461bcd02815260206004820152601560248201527f496e76616c69642043616e646964617465204361700000000000000000000000604482015290519081900360640190fd5b600160a060020a038216600090815260116020526040902054829060ff16156107b8576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612664833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460a060020a900460ff1615610830576040805160e560020a62461bcd02815260206004820152601360248201527f416c726561647920612063616e64696461746500000000000000000000000000604482015290519081900360640190fd5b3360009081526013602052604090205460ff16151560011461089c576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f74204772616e64204d617374657200000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038316600090815260016020819052604090912001546108c9903463ffffffff61225b16565b6007805460018181019092557fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688018054600160a060020a03808816600160a060020a03199283168117909355604080516060810182523380825260208281018881528385018a81526000988952898352858920945185549251151560a060020a0274ff00000000000000000000000000000000000000001991909816929098169190911796909616949094178255935195810195909555918352600290930190925220549092506109a0903463ffffffff61225b16565b600160a060020a0384166000908152600160208181526040808420338552600201909152909120919091556008546109dd9163ffffffff61225b16565b600855336000908152600560205260409020541515610a435760068054600181810183556000929092527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f018054600160a060020a031916331790556009805490910190555b336000818152600560209081526040808320805460018181018355918552838520018054600160a060020a038a16600160a060020a031991821681179092558186526002855283862080549384018155865294849020909101805490941685179093558051938452908301919091523482820152517f7635f1d87b47fba9f2b09e56eb4be75cca030e0cb179c1602ac9261d39a8f5c19181900360600190a1505050565b6006805482908110610af557fe5b600091825260209091200154600160a060020a0316905081565b600160a060020a038216600090815260016020908152604080832033845260020190915281205483908390811115610b91576040805160e560020a62461bcd02815260206004820152600c60248201527f496e76616c696420566f74650000000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0382811660009081526001602052604090205416331415610c4357600b54600160a060020a0383166000908152600160209081526040808320338452600201909152902054610bed908363ffffffff61227116565b1015610c43576040805160e560020a62461bcd02815260206004820181905260248201527f4d696e696d756d206361702073686f756c64206265206d61696e7461696e6564604482015290519081900360640190fd5b600160a060020a03851660009081526001602081905260409091200154610c70908563ffffffff61227116565b600160a060020a038616600090815260016020818152604080842092830194909455338352600290910190522054610cae908563ffffffff61227116565b600160a060020a0386166000908152600160209081526040808320338452600201909152902055600f54610ce8904363ffffffff61225b16565b33600090815260208181526040808320848452909152902054909350610d14908563ffffffff61225b16565b33600081815260208181526040808320888452808352818420959095558282526001948501805495860181558352918190209093018690558051918252600160a060020a0388169282019290925280820186905290517faa0e554f781c3c3b2be110a0557f260f11af9a8aa2c64bc1e7a31dbb21e32fa29181900360600190a15050505050565b60606007805480602002602001604051908101604052809291908181526020018280548015610df357602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610dd5575b505050505090505b90565b6060600080600780549050604051908082528060200260200182016040528015610e32578160200160208202803883390190505b50925060009150600090505b600754811015610ece57600780546000919083908110610e5a57fe5b600091825260209091200154600160a060020a031614610ec6576007805482908110610e8257fe5b6000918252602090912001548351600160a060020a0390911690849084908110610ea857fe5b600160a060020a039092166020928302909101909101526001909101905b600101610e3e565b818352610ee06007602085018461257b565b50505050565b60095481565b600460209081526000928352604080842090915290825290205460ff1681565b33600090815260208181526040808320938352929052205490565b600560205281600052604060002081815481101515610f4257fe5b600091825260209091200154600160a060020a03169150829050565b600160a060020a038116600090815260026020908152604091829020805483518184028101840190945280845260609392830182828015610fc857602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610faa575b50505050509050919050565b600080805b60065481101561102b5783600160a060020a0316600682815481101515610ffc57fe5b600091825260209091200154600160a060020a031614156110235760018192509250611033565b600101610fd9565b600092508291505b50915091565b3360009081526020818152604091829020600101805483518184028101840190945280845260609392830182828015610df357602002820191906000526020600020905b81548152602001906001019080831161107d575050505050905090565b600160a060020a0391821660009081526001602090815260408083209390941682526002909201909152205490565b6007805482908110610af557fe5b60016020819052600091825260409091208054910154600160a060020a0382169160a060020a900460ff169083565b336000908152601060205260408120548390839060ff1615611172576040805160e560020a62461bcd02815260206004820152600d60248201527f496e76616c6964204f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600082116111ca576040805160e560020a62461bcd02815260206004820152601460248201527f496e76616c696420626c6f636b206e756d626572000000000000000000000000604482015290519081900360640190fd5b43821115611248576040805160e560020a62461bcd02815260206004820152603560248201527f426c6f636b206e756d6265722073686f756c64206265206c657373207468616e60448201527f2063757272656e7420626c6f636b206e756d6265720000000000000000000000606482015290519081900360840190fd5b33600090815260208181526040808320858452909152812054116112b6576040805160e560020a62461bcd02815260206004820152601260248201527f4e6f2063617020746f2077697468647261770000000000000000000000000000604482015290519081900360640190fd5b3360009081526020819052604090206001018054839190839081106112d757fe5b9060005260206000200154141515611339576040805160e560020a62461bcd02815260206004820152600d60248201527f496e76616c696420696e64657800000000000000000000000000000000000000604482015290519081900360640190fd5b336000818152602081815260408083208984528083529083208054908490559383529190526001018054919450908590811061137157fe5b60009182526020822001819055604051339185156108fc02918691818181858888f193505050501580156113a9573d6000803e3d6000fd5b50604080513381526020810187905280820185905290517ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360600190a15050505050565b600a5481565b600160a060020a03166000908152600160208190526040909120015490565b60136020526000908152604090205460ff1681565b600160a060020a038116600090815260116020526040812054829060ff161561148c576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612664833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460a060020a900460ff1615156114f3576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612664833981519152604482015290519081900360640190fd5b6114fb611da6565b600160a060020a03841660009081526003602052604090205460640281151561152057fe5b049392505050565b600260205281600052604060002081815481101515610f4257fe5b6012805482908110610af557fe5b600160a060020a031660009081526005602052604090205490565b60606000806006805490506040519080825280602002602001820160405280156115a0578160200160208202803883390190505b50925060009150600090505b60065481101561163c576006805460009190839081106115c857fe5b600091825260209091200154600160a060020a0316146116345760068054829081106115f057fe5b6000918252602090912001548351600160a060020a039091169084908490811061161657fe5b600160a060020a039092166020928302909101909101526001909101905b6001016115ac565b818352610ee06006602085018461257b565b600c543410156116a8576040805160e560020a62461bcd02815260206004820152601160248201527f496e76616c696420566f74657220436170000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038116600090815260116020526040902054819060ff1615611709576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612664833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460a060020a900460ff161515611770576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612664833981519152604482015290519081900360640190fd5b3360009081526013602052604090205460ff1615156001146117dc576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f74204772616e64204d617374657200000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03821660009081526001602081905260409091200154611809903463ffffffff61225b16565b600160a060020a038316600090815260016020818152604080842092830194909455338352600290910190522054151561187657600160a060020a0382166000908152600260209081526040822080546001810182559083529120018054600160a060020a031916331790555b600160a060020a03821660009081526001602090815260408083203384526002019091529020546118ad903463ffffffff61225b16565b600160a060020a0383166000818152600160209081526040808320338085526002909101835292819020949094558351918252810191909152348183015290517f66a9138482c99e9baf08860110ef332cc0c23b4a199a53593d8db0fc8f96fbfc9181900360600190a15050565b60036020526000908152604090205481565b60085481565b600f5481565b600160a060020a038082166000908152600160205260408120549091829182918291829187911633146119dc576040805160e560020a62461bcd02815260206004820152602160248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f60448201527f6e00000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a038716600090815260016020526040902054879060a060020a900460ff161515611a7d576040805160e560020a62461bcd02815260206004820152602560248201527f4f6e6c792063616e6469646174652063616e2063616c6c20746869732066756e60448201527f6374696f6e000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0388166000908152600160208190526040909120805474ff000000000000000000000000000000000000000019169055600854611ac69163ffffffff61227116565b600855611ad288612283565b611ada612377565b3360009081526005602052604081208054909850965094505b85851015611bde5787600160a060020a03168786815481101515611b1357fe5b600091825260209091200154600160a060020a03161415611bd3578660018703815481101515611b3f57fe5b6000918252602090912001548754600160a060020a0390911690889087908110611b6557fe5b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a031602179055508660018703815481101515611ba457fe5b60009182526020909120018054600160a060020a03191690558654611bcd8860001983016125e0565b50611bde565b600190940193611af3565b86541515611bef57611bef336123d5565b600160a060020a038816600081815260016020818152604080842033855260028101835290842054949093528190520154909450611c33908563ffffffff61227116565b600160a060020a0389166000908152600160208181526040808420928301949094553383526002909101905290812055600e54611c76904363ffffffff61225b16565b33600090815260208181526040808320848452909152902054909350611ca2908563ffffffff61225b16565b33600081815260208181526040808320888452808352818420959095558282526001948501805495860181558352918190209093018690558051918252600160a060020a038b169282019290925281517f4edf3e325d0063213a39f9085522994a1c44bea5f39e7d63ef61260a1e58c6d3929181900390910190a15050505050505050565b60116020526000908152604090205460ff1681565b600160a060020a039081166000908152600160205260409020541690565b600d5481565b600e5481565b600160a060020a031660009081526001602052604090205460a060020a900460ff1690565b600b5481565b60106020526000908152604090205460ff1681565b60095490565b33600081815260116020526040812054909182918291829182916060918291849182919060ff1615611e16576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612664833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460a060020a900460ff161515611e7d576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612664833981519152604482015290519081900360640190fd5b611e8633611d3c565b9950600460008b600160a060020a0316600160a060020a0316815260200190815260200160002060008c600160a060020a0316600160a060020a0316815260200190815260200160002060009054906101000a900460ff16151515611f35576040805160e560020a62461bcd02815260206004820152600d60248201527f416c726561647920766f74656400000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03808b166000908152600460209081526040808320938f168352928152828220805460ff19166001908117909155600390915291902080549091019055604b611f83611da6565b600160a060020a038d16600090815260036020526040902054606402811515611fa857fe5b041061224857600160a060020a038b166000908152601060205260409020805460ff19166001179055611fda8b610fd4565b9850985088156122485760075460408051828152602080840282010190915260009850889750908015612017578160200160208202803883390190505b506007546040805182815260208084028201019091529196508015612046578160200160208202803883390190505b509350600092505b60075483101561218d57600780548490811061206657fe5b600091825260209091200154600160a060020a0390811692508b1661208a83611d3c565b600160a060020a03161415612156576008546120ad90600163ffffffff61227116565b60085584516001870196839187919081106120c457fe5b600160a060020a0392831660209182029092018101919091528382166000908152601182526040808220805460ff19166001908117909155808452818320805474ffffffffffffffffffffffffffffffffffffffffff1916815501829055928e168152600590915290812061213891612604565b600160a060020a038b16600090815260036020526040812055612182565b835160018801978391869190811061216a57fe5b600160a060020a039092166020928302909101909101525b60019092019161204e565b86845285855283516121a690600790602087019061257b565b506121af612377565b6121b8886124ce565b7fe18d61a5bf4aa2ab40afc88aa9039d27ae17ff4ec1c65f5f414df6f02ce8b35e8b866040518083600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561223357818101518382015260200161221b565b50505050905001935050505060405180910390a15b5050505050505050505050565b600c5481565b60008282018381101561226a57fe5b9392505050565b60008282111561227d57fe5b50900390565b60075460005b818110156123725782600160a060020a03166007828154811015156122aa57fe5b600091825260209091200154600160a060020a0316141561236a576007805460001984019081106122d757fe5b60009182526020909120015460078054600160a060020a0390921691839081106122fd57fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905560078054600019840190811061233857fe5b60009182526020909120018054600160a060020a031916905560078054906123649060001983016125e0565b50612372565b600101612289565b505050565b600a5460075410156123d3576040805160e560020a62461bcd02815260206004820152601360248201527f4c6f772043616e64696461746520436f756e7400000000000000000000000000604482015290519081900360640190fd5b565b60065460005b818110156123725782600160a060020a03166006828154811015156123fc57fe5b600091825260209091200154600160a060020a031614156124c65760068054600019840190811061242957fe5b60009182526020909120015460068054600160a060020a03909216918390811061244f57fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905560068054600019840190811061248a57fe5b60009182526020909120018054600160a060020a031916905560068054906124b69060001983016125e0565b5060098054600019019055612372565b6001016123db565b6006805460001981019190829081106124e357fe5b60009182526020909120015460068054600160a060020a03909216918490811061250957fe5b60009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055600680548290811061254057fe5b60009182526020909120018054600160a060020a0319169055600680549061256c9060001983016125e0565b50506009805460001901905550565b8280548282559060005260206000209081019282156125d0579160200282015b828111156125d05782518254600160a060020a031916600160a060020a0390911617825560209092019160019091019061259b565b506125dc929150612625565b5090565b81548183558181111561237257600083815260209020612372918101908301612649565b50805460008255906000526020600020908101906126229190612649565b50565b610dfb91905b808211156125dc578054600160a060020a031916815560010161262b565b610dfb91905b808211156125dc576000815560010161264f5600496e76616c69642043616e646964617465000000000000000000000000000000a165627a7a72305820a3c9003c2029e4c0361e562415306dfa5577554f6a337d6e48717a8dc7542e3d0029` // DeployXDCValidator deploys a new Ethereum contract, binding an instance of XDCValidator to it. func DeployXDCValidator(auth *bind.TransactOpts, backend bind.ContractBackend, _candidates []common.Address, _caps []*big.Int, _firstOwner common.Address, _minCandidateCap *big.Int, _minVoterCap *big.Int, _maxValidatorNumber *big.Int, _candidateWithdrawDelay *big.Int, _voterWithdrawDelay *big.Int, _grandMasters []common.Address, _minCandidateNum *big.Int) (common.Address, *types.Transaction, *XDCValidator, error) { @@ -332,84 +332,6 @@ func (_XDCValidator *XDCValidatorCallerSession) GetCandidates() ([]common.Addres return _XDCValidator.Contract.GetCandidates(&_XDCValidator.CallOpts) } -// GetGrandMasters is a free data retrieval call binding the contract method 0x52b3ed16. -// -// Solidity: function getGrandMasters() constant returns(address[]) -func (_XDCValidator *XDCValidatorCaller) GetGrandMasters(opts *bind.CallOpts) ([]common.Address, error) { - var ( - ret0 = new([]common.Address) - ) - out := ret0 - err := _XDCValidator.contract.Call(opts, out, "getGrandMasters") - return *ret0, err -} - -// GetGrandMasters is a free data retrieval call binding the contract method 0x52b3ed16. -// -// Solidity: function getGrandMasters() constant returns(address[]) -func (_XDCValidator *XDCValidatorSession) GetGrandMasters() ([]common.Address, error) { - return _XDCValidator.Contract.GetGrandMasters(&_XDCValidator.CallOpts) -} - -// GetGrandMasters is a free data retrieval call binding the contract method 0x52b3ed16. -// -// Solidity: function getGrandMasters() constant returns(address[]) -func (_XDCValidator *XDCValidatorCallerSession) GetGrandMasters() ([]common.Address, error) { - return _XDCValidator.Contract.GetGrandMasters(&_XDCValidator.CallOpts) -} - -// GetHashCount is a free data retrieval call binding the contract method 0xc45607df. -// -// Solidity: function getHashCount(_address address) constant returns(uint256) -func (_XDCValidator *XDCValidatorCaller) GetHashCount(opts *bind.CallOpts, _address common.Address) (*big.Int, error) { - var ( - ret0 = new(*big.Int) - ) - out := ret0 - err := _XDCValidator.contract.Call(opts, out, "getHashCount", _address) - return *ret0, err -} - -// GetHashCount is a free data retrieval call binding the contract method 0xc45607df. -// -// Solidity: function getHashCount(_address address) constant returns(uint256) -func (_XDCValidator *XDCValidatorSession) GetHashCount(_address common.Address) (*big.Int, error) { - return _XDCValidator.Contract.GetHashCount(&_XDCValidator.CallOpts, _address) -} - -// GetHashCount is a free data retrieval call binding the contract method 0xc45607df. -// -// Solidity: function getHashCount(_address address) constant returns(uint256) -func (_XDCValidator *XDCValidatorCallerSession) GetHashCount(_address common.Address) (*big.Int, error) { - return _XDCValidator.Contract.GetHashCount(&_XDCValidator.CallOpts, _address) -} - -// GetLatestKYC is a free data retrieval call binding the contract method 0x32658652. -// -// Solidity: function getLatestKYC(_address address) constant returns(string) -func (_XDCValidator *XDCValidatorCaller) GetLatestKYC(opts *bind.CallOpts, _address common.Address) (string, error) { - var ( - ret0 = new(string) - ) - out := ret0 - err := _XDCValidator.contract.Call(opts, out, "getLatestKYC", _address) - return *ret0, err -} - -// GetLatestKYC is a free data retrieval call binding the contract method 0x32658652. -// -// Solidity: function getLatestKYC(_address address) constant returns(string) -func (_XDCValidator *XDCValidatorSession) GetLatestKYC(_address common.Address) (string, error) { - return _XDCValidator.Contract.GetLatestKYC(&_XDCValidator.CallOpts, _address) -} - -// GetLatestKYC is a free data retrieval call binding the contract method 0x32658652. -// -// Solidity: function getLatestKYC(_address address) constant returns(string) -func (_XDCValidator *XDCValidatorCallerSession) GetLatestKYC(_address common.Address) (string, error) { - return _XDCValidator.Contract.GetLatestKYC(&_XDCValidator.CallOpts, _address) -} - // GetOwnerCount is a free data retrieval call binding the contract method 0xef18374a. // // Solidity: function getOwnerCount() constant returns(uint256) @@ -644,6 +566,32 @@ func (_XDCValidator *XDCValidatorCallerSession) HasVotedInvalid(arg0 common.Addr return _XDCValidator.Contract.HasVotedInvalid(&_XDCValidator.CallOpts, arg0, arg1) } +// InvalidCandidate is a free data retrieval call binding the contract method 0xb622f141. +// +// Solidity: function invalidCandidate( address) constant returns(bool) +func (_XDCValidator *XDCValidatorCaller) InvalidCandidate(opts *bind.CallOpts, arg0 common.Address) (bool, error) { + var ( + ret0 = new(bool) + ) + out := ret0 + err := _XDCValidator.contract.Call(opts, out, "invalidCandidate", arg0) + return *ret0, err +} + +// InvalidCandidate is a free data retrieval call binding the contract method 0xb622f141. +// +// Solidity: function invalidCandidate( address) constant returns(bool) +func (_XDCValidator *XDCValidatorSession) InvalidCandidate(arg0 common.Address) (bool, error) { + return _XDCValidator.Contract.InvalidCandidate(&_XDCValidator.CallOpts, arg0) +} + +// InvalidCandidate is a free data retrieval call binding the contract method 0xb622f141. +// +// Solidity: function invalidCandidate( address) constant returns(bool) +func (_XDCValidator *XDCValidatorCallerSession) InvalidCandidate(arg0 common.Address) (bool, error) { + return _XDCValidator.Contract.InvalidCandidate(&_XDCValidator.CallOpts, arg0) +} + // InvalidKYCCount is a free data retrieval call binding the contract method 0x72e44a38. // // Solidity: function invalidKYCCount( address) constant returns(uint256) @@ -670,30 +618,56 @@ func (_XDCValidator *XDCValidatorCallerSession) InvalidKYCCount(arg0 common.Addr return _XDCValidator.Contract.InvalidKYCCount(&_XDCValidator.CallOpts, arg0) } +// InvalidOwner is a free data retrieval call binding the contract method 0xdb11daef. +// +// Solidity: function invalidOwner( address) constant returns(bool) +func (_XDCValidator *XDCValidatorCaller) InvalidOwner(opts *bind.CallOpts, arg0 common.Address) (bool, error) { + var ( + ret0 = new(bool) + ) + out := ret0 + err := _XDCValidator.contract.Call(opts, out, "invalidOwner", arg0) + return *ret0, err +} + +// InvalidOwner is a free data retrieval call binding the contract method 0xdb11daef. +// +// Solidity: function invalidOwner( address) constant returns(bool) +func (_XDCValidator *XDCValidatorSession) InvalidOwner(arg0 common.Address) (bool, error) { + return _XDCValidator.Contract.InvalidOwner(&_XDCValidator.CallOpts, arg0) +} + +// InvalidOwner is a free data retrieval call binding the contract method 0xdb11daef. +// +// Solidity: function invalidOwner( address) constant returns(bool) +func (_XDCValidator *XDCValidatorCallerSession) InvalidOwner(arg0 common.Address) (bool, error) { + return _XDCValidator.Contract.InvalidOwner(&_XDCValidator.CallOpts, arg0) +} + // InvalidPercent is a free data retrieval call binding the contract method 0x5b860d27. // -// Solidity: function invalidPercent(_invalidCandidate address) constant returns(uint256) -func (_XDCValidator *XDCValidatorCaller) InvalidPercent(opts *bind.CallOpts, _invalidCandidate common.Address) (*big.Int, error) { +// Solidity: function invalidPercent(_owner address) constant returns(uint256) +func (_XDCValidator *XDCValidatorCaller) InvalidPercent(opts *bind.CallOpts, _owner common.Address) (*big.Int, error) { var ( ret0 = new(*big.Int) ) out := ret0 - err := _XDCValidator.contract.Call(opts, out, "invalidPercent", _invalidCandidate) + err := _XDCValidator.contract.Call(opts, out, "invalidPercent", _owner) return *ret0, err } // InvalidPercent is a free data retrieval call binding the contract method 0x5b860d27. // -// Solidity: function invalidPercent(_invalidCandidate address) constant returns(uint256) -func (_XDCValidator *XDCValidatorSession) InvalidPercent(_invalidCandidate common.Address) (*big.Int, error) { - return _XDCValidator.Contract.InvalidPercent(&_XDCValidator.CallOpts, _invalidCandidate) +// Solidity: function invalidPercent(_owner address) constant returns(uint256) +func (_XDCValidator *XDCValidatorSession) InvalidPercent(_owner common.Address) (*big.Int, error) { + return _XDCValidator.Contract.InvalidPercent(&_XDCValidator.CallOpts, _owner) } // InvalidPercent is a free data retrieval call binding the contract method 0x5b860d27. // -// Solidity: function invalidPercent(_invalidCandidate address) constant returns(uint256) -func (_XDCValidator *XDCValidatorCallerSession) InvalidPercent(_invalidCandidate common.Address) (*big.Int, error) { - return _XDCValidator.Contract.InvalidPercent(&_XDCValidator.CallOpts, _invalidCandidate) +// Solidity: function invalidPercent(_owner address) constant returns(uint256) +func (_XDCValidator *XDCValidatorCallerSession) InvalidPercent(_owner common.Address) (*big.Int, error) { + return _XDCValidator.Contract.InvalidPercent(&_XDCValidator.CallOpts, _owner) } // IsCandidate is a free data retrieval call binding the contract method 0xd51b9e93. @@ -722,30 +696,34 @@ func (_XDCValidator *XDCValidatorCallerSession) IsCandidate(_candidate common.Ad return _XDCValidator.Contract.IsCandidate(&_XDCValidator.CallOpts, _candidate) } -// KycString is a free data retrieval call binding the contract method 0x27a6296b. +// IsOwner is a free data retrieval call binding the contract method 0x2f54bf6e. // -// Solidity: function kycString( address, uint256) constant returns(string) -func (_XDCValidator *XDCValidatorCaller) KycString(opts *bind.CallOpts, arg0 common.Address, arg1 *big.Int) (string, error) { +// Solidity: function isOwner(owner address) constant returns(bool, uint256) +func (_XDCValidator *XDCValidatorCaller) IsOwner(opts *bind.CallOpts, owner common.Address) (bool, *big.Int, error) { var ( - ret0 = new(string) + ret0 = new(bool) + ret1 = new(*big.Int) ) - out := ret0 - err := _XDCValidator.contract.Call(opts, out, "kycString", arg0, arg1) - return *ret0, err + out := &[]interface{}{ + ret0, + ret1, + } + err := _XDCValidator.contract.Call(opts, out, "isOwner", owner) + return *ret0, *ret1, err } -// KycString is a free data retrieval call binding the contract method 0x27a6296b. +// IsOwner is a free data retrieval call binding the contract method 0x2f54bf6e. // -// Solidity: function kycString( address, uint256) constant returns(string) -func (_XDCValidator *XDCValidatorSession) KycString(arg0 common.Address, arg1 *big.Int) (string, error) { - return _XDCValidator.Contract.KycString(&_XDCValidator.CallOpts, arg0, arg1) +// Solidity: function isOwner(owner address) constant returns(bool, uint256) +func (_XDCValidator *XDCValidatorSession) IsOwner(owner common.Address) (bool, *big.Int, error) { + return _XDCValidator.Contract.IsOwner(&_XDCValidator.CallOpts, owner) } -// KycString is a free data retrieval call binding the contract method 0x27a6296b. +// IsOwner is a free data retrieval call binding the contract method 0x2f54bf6e. // -// Solidity: function kycString( address, uint256) constant returns(string) -func (_XDCValidator *XDCValidatorCallerSession) KycString(arg0 common.Address, arg1 *big.Int) (string, error) { - return _XDCValidator.Contract.KycString(&_XDCValidator.CallOpts, arg0, arg1) +// Solidity: function isOwner(owner address) constant returns(bool, uint256) +func (_XDCValidator *XDCValidatorCallerSession) IsOwner(owner common.Address) (bool, *big.Int, error) { + return _XDCValidator.Contract.IsOwner(&_XDCValidator.CallOpts, owner) } // MaxValidatorNumber is a free data retrieval call binding the contract method 0xd09f1ab4. @@ -852,6 +830,32 @@ func (_XDCValidator *XDCValidatorCallerSession) MinVoterCap() (*big.Int, error) return _XDCValidator.Contract.MinVoterCap(&_XDCValidator.CallOpts) } +// OwnerCount is a free data retrieval call binding the contract method 0x0db02622. +// +// Solidity: function ownerCount() constant returns(uint256) +func (_XDCValidator *XDCValidatorCaller) OwnerCount(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := ret0 + err := _XDCValidator.contract.Call(opts, out, "ownerCount") + return *ret0, err +} + +// OwnerCount is a free data retrieval call binding the contract method 0x0db02622. +// +// Solidity: function ownerCount() constant returns(uint256) +func (_XDCValidator *XDCValidatorSession) OwnerCount() (*big.Int, error) { + return _XDCValidator.Contract.OwnerCount(&_XDCValidator.CallOpts) +} + +// OwnerCount is a free data retrieval call binding the contract method 0x0db02622. +// +// Solidity: function ownerCount() constant returns(uint256) +func (_XDCValidator *XDCValidatorCallerSession) OwnerCount() (*big.Int, error) { + return _XDCValidator.Contract.OwnerCount(&_XDCValidator.CallOpts) +} + // OwnerToCandidate is a free data retrieval call binding the contract method 0x2a3640b1. // // Solidity: function ownerToCandidate( address, uint256) constant returns(address) @@ -1017,6 +1021,48 @@ func (_XDCValidator *XDCValidatorTransactorSession) Propose(_candidate common.Ad return _XDCValidator.Contract.Propose(&_XDCValidator.TransactOpts, _candidate) } +// RemoveCandidatesZeroAddresses is a paid mutator transaction binding the contract method 0x0999ec79. +// +// Solidity: function removeCandidatesZeroAddresses() returns() +func (_XDCValidator *XDCValidatorTransactor) RemoveCandidatesZeroAddresses(opts *bind.TransactOpts) (*types.Transaction, error) { + return _XDCValidator.contract.Transact(opts, "removeCandidatesZeroAddresses") +} + +// RemoveCandidatesZeroAddresses is a paid mutator transaction binding the contract method 0x0999ec79. +// +// Solidity: function removeCandidatesZeroAddresses() returns() +func (_XDCValidator *XDCValidatorSession) RemoveCandidatesZeroAddresses() (*types.Transaction, error) { + return _XDCValidator.Contract.RemoveCandidatesZeroAddresses(&_XDCValidator.TransactOpts) +} + +// RemoveCandidatesZeroAddresses is a paid mutator transaction binding the contract method 0x0999ec79. +// +// Solidity: function removeCandidatesZeroAddresses() returns() +func (_XDCValidator *XDCValidatorTransactorSession) RemoveCandidatesZeroAddresses() (*types.Transaction, error) { + return _XDCValidator.Contract.RemoveCandidatesZeroAddresses(&_XDCValidator.TransactOpts) +} + +// RemoveOwnersZeroAddresses is a paid mutator transaction binding the contract method 0x681d8bf2. +// +// Solidity: function removeOwnersZeroAddresses() returns() +func (_XDCValidator *XDCValidatorTransactor) RemoveOwnersZeroAddresses(opts *bind.TransactOpts) (*types.Transaction, error) { + return _XDCValidator.contract.Transact(opts, "removeOwnersZeroAddresses") +} + +// RemoveOwnersZeroAddresses is a paid mutator transaction binding the contract method 0x681d8bf2. +// +// Solidity: function removeOwnersZeroAddresses() returns() +func (_XDCValidator *XDCValidatorSession) RemoveOwnersZeroAddresses() (*types.Transaction, error) { + return _XDCValidator.Contract.RemoveOwnersZeroAddresses(&_XDCValidator.TransactOpts) +} + +// RemoveOwnersZeroAddresses is a paid mutator transaction binding the contract method 0x681d8bf2. +// +// Solidity: function removeOwnersZeroAddresses() returns() +func (_XDCValidator *XDCValidatorTransactorSession) RemoveOwnersZeroAddresses() (*types.Transaction, error) { + return _XDCValidator.Contract.RemoveOwnersZeroAddresses(&_XDCValidator.TransactOpts) +} + // Resign is a paid mutator transaction binding the contract method 0xae6e43f5. // // Solidity: function resign(_candidate address) returns() @@ -1059,27 +1105,6 @@ func (_XDCValidator *XDCValidatorTransactorSession) Unvote(_candidate common.Add return _XDCValidator.Contract.Unvote(&_XDCValidator.TransactOpts, _candidate, _cap) } -// UploadKYC is a paid mutator transaction binding the contract method 0xf5c95125. -// -// Solidity: function uploadKYC(kychash string) returns() -func (_XDCValidator *XDCValidatorTransactor) UploadKYC(opts *bind.TransactOpts, kychash string) (*types.Transaction, error) { - return _XDCValidator.contract.Transact(opts, "uploadKYC", kychash) -} - -// UploadKYC is a paid mutator transaction binding the contract method 0xf5c95125. -// -// Solidity: function uploadKYC(kychash string) returns() -func (_XDCValidator *XDCValidatorSession) UploadKYC(kychash string) (*types.Transaction, error) { - return _XDCValidator.Contract.UploadKYC(&_XDCValidator.TransactOpts, kychash) -} - -// UploadKYC is a paid mutator transaction binding the contract method 0xf5c95125. -// -// Solidity: function uploadKYC(kychash string) returns() -func (_XDCValidator *XDCValidatorTransactorSession) UploadKYC(kychash string) (*types.Transaction, error) { - return _XDCValidator.Contract.UploadKYC(&_XDCValidator.TransactOpts, kychash) -} - // Vote is a paid mutator transaction binding the contract method 0x6dd7d8ea. // // Solidity: function vote(_candidate address) returns() @@ -1103,23 +1128,23 @@ func (_XDCValidator *XDCValidatorTransactorSession) Vote(_candidate common.Addre // VoteInvalidKYC is a paid mutator transaction binding the contract method 0xf2ee3c7d. // -// Solidity: function voteInvalidKYC(_invalidCandidate address) returns() -func (_XDCValidator *XDCValidatorTransactor) VoteInvalidKYC(opts *bind.TransactOpts, _invalidCandidate common.Address) (*types.Transaction, error) { - return _XDCValidator.contract.Transact(opts, "voteInvalidKYC", _invalidCandidate) +// Solidity: function voteInvalidKYC(_owner address) returns() +func (_XDCValidator *XDCValidatorTransactor) VoteInvalidKYC(opts *bind.TransactOpts, _owner common.Address) (*types.Transaction, error) { + return _XDCValidator.contract.Transact(opts, "voteInvalidKYC", _owner) } // VoteInvalidKYC is a paid mutator transaction binding the contract method 0xf2ee3c7d. // -// Solidity: function voteInvalidKYC(_invalidCandidate address) returns() -func (_XDCValidator *XDCValidatorSession) VoteInvalidKYC(_invalidCandidate common.Address) (*types.Transaction, error) { - return _XDCValidator.Contract.VoteInvalidKYC(&_XDCValidator.TransactOpts, _invalidCandidate) +// Solidity: function voteInvalidKYC(_owner address) returns() +func (_XDCValidator *XDCValidatorSession) VoteInvalidKYC(_owner common.Address) (*types.Transaction, error) { + return _XDCValidator.Contract.VoteInvalidKYC(&_XDCValidator.TransactOpts, _owner) } // VoteInvalidKYC is a paid mutator transaction binding the contract method 0xf2ee3c7d. // -// Solidity: function voteInvalidKYC(_invalidCandidate address) returns() -func (_XDCValidator *XDCValidatorTransactorSession) VoteInvalidKYC(_invalidCandidate common.Address) (*types.Transaction, error) { - return _XDCValidator.Contract.VoteInvalidKYC(&_XDCValidator.TransactOpts, _invalidCandidate) +// Solidity: function voteInvalidKYC(_owner address) returns() +func (_XDCValidator *XDCValidatorTransactorSession) VoteInvalidKYC(_owner common.Address) (*types.Transaction, error) { + return _XDCValidator.Contract.VoteInvalidKYC(&_XDCValidator.TransactOpts, _owner) } // Withdraw is a paid mutator transaction binding the contract method 0x441a3e70. diff --git a/contracts/validator/src/abi b/contracts/validator/src/abi index ecd07cc0e..ff70dfc45 100644 --- a/contracts/validator/src/abi +++ b/contracts/validator/src/abi @@ -64,6 +64,29 @@ "stateMutability": "view", "type": "function" }, + { + "constant": false, + "inputs": [], + "name": "removeCandidatesZeroAddresses", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "ownerCount", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, { "constant": true, "inputs": [ @@ -118,11 +141,11 @@ "type": "uint256" } ], - "name": "kycString", + "name": "ownerToCandidate", "outputs": [ { "name": "", - "type": "string" + "type": "address" } ], "payable": false, @@ -133,19 +156,15 @@ "constant": true, "inputs": [ { - "name": "", + "name": "_candidate", "type": "address" - }, - { - "name": "", - "type": "uint256" } ], - "name": "ownerToCandidate", + "name": "getVoters", "outputs": [ { "name": "", - "type": "address" + "type": "address[]" } ], "payable": false, @@ -156,15 +175,19 @@ "constant": true, "inputs": [ { - "name": "_candidate", + "name": "owner", "type": "address" } ], - "name": "getVoters", + "name": "isOwner", "outputs": [ { "name": "", - "type": "address[]" + "type": "bool" + }, + { + "name": "", + "type": "uint256" } ], "payable": false, @@ -208,25 +231,6 @@ "stateMutability": "view", "type": "function" }, - { - "constant": true, - "inputs": [ - { - "name": "_address", - "type": "address" - } - ], - "name": "getLatestKYC", - "outputs": [ - { - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, { "constant": true, "inputs": [ @@ -305,20 +309,6 @@ "stateMutability": "view", "type": "function" }, - { - "constant": true, - "inputs": [], - "name": "getGrandMasters", - "outputs": [ - { - "name": "", - "type": "address[]" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, { "constant": true, "inputs": [ @@ -361,7 +351,7 @@ "constant": true, "inputs": [ { - "name": "_invalidCandidate", + "name": "_owner", "type": "address" } ], @@ -437,6 +427,15 @@ "stateMutability": "view", "type": "function" }, + { + "constant": false, + "inputs": [], + "name": "removeOwnersZeroAddresses", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, { "constant": false, "inputs": [ @@ -516,15 +515,15 @@ "constant": true, "inputs": [ { - "name": "_candidate", + "name": "", "type": "address" } ], - "name": "getCandidateOwner", + "name": "invalidCandidate", "outputs": [ { "name": "", - "type": "address" + "type": "bool" } ], "payable": false, @@ -535,15 +534,15 @@ "constant": true, "inputs": [ { - "name": "_address", + "name": "_candidate", "type": "address" } ], - "name": "getHashCount", + "name": "getCandidateOwner", "outputs": [ { "name": "", - "type": "uint256" + "type": "address" } ], "payable": false, @@ -613,12 +612,17 @@ }, { "constant": true, - "inputs": [], - "name": "getOwnerCount", + "inputs": [ + { + "name": "", + "type": "address" + } + ], + "name": "invalidOwner", "outputs": [ { "name": "", - "type": "uint256" + "type": "bool" } ], "payable": false, @@ -626,28 +630,28 @@ "type": "function" }, { - "constant": false, - "inputs": [ + "constant": true, + "inputs": [], + "name": "getOwnerCount", + "outputs": [ { - "name": "_invalidCandidate", - "type": "address" + "name": "", + "type": "uint256" } ], - "name": "voteInvalidKYC", - "outputs": [], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { - "name": "kychash", - "type": "string" + "name": "_owner", + "type": "address" } ], - "name": "uploadKYC", + "name": "voteInvalidKYC", "outputs": [], "payable": false, "stateMutability": "nonpayable", diff --git a/contracts/validator/src/bytecode b/contracts/validator/src/bytecode index 814d09efc..721b03309 100644 --- a/contracts/validator/src/bytecode +++ b/contracts/validator/src/bytecode @@ -1 +1 @@ -0x60806040523480156200001157600080fd5b50604051620028bb380380620028bb83398101604090815281516020830151918301516060840151608085015160a086015160c087015160e08801516101008901516101208a01516009819055600a879055600b869055600c859055600d849055600e8390556007805460018101825560009182527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688018054600160a060020a031916600160a060020a038b16179055988b019a998a01999798969795969495939492939190910191805b8b51821015620002e85760088c83815181101515620000f757fe5b6020908102919091018101518254600180820185556000948552928420018054600160a060020a031916600160a060020a039092169190911790558d519091908e90859081106200014457fe5b6020908102909101810151600160a060020a03908116835290820192909252604001600020805460a060020a60ff0219928d16600160a060020a03199091161791909116740100000000000000000000000000000000000000001781558b519091508b9083908110620001b357fe5b906020019060200201518160010181905550600260008d84815181101515620001d857fe5b6020908102909101810151600160a060020a03908116835282820193909352604091820160009081208054600181018255908252828220018054948f16600160a060020a0319909516851790559283526006905290208c518d90849081106200023d57fe5b6020908102919091018101518254600181018455600093845291909220018054600160a060020a031916600160a060020a039092169190911790558a518b90839081106200028757fe5b90602001906020020151600160008e85815181101515620002a457fe5b6020908102909101810151600160a060020a0390811683528282019390935260409182016000908120938f16815260029093019052902055600190910190620000dc565b600091505b83518210156200039657600f84838151811015156200030857fe5b6020908102919091018101518254600180820185556000948552928420018054600160a060020a031916600160a060020a03909216919091179055855190916010918790869081106200035757fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff191691151591909117905560019190910190620002ed565b50505050505050505050505061250980620003b26000396000f3006080604052600436106101d75763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630126795181146101dc578063025e7c27146101f257806302aa9be21461022657806306a49fce1461024a5780630e3e4fb8146102af57806315febd68146102ea57806327a6296b146103145780632a3640b1146103ad5780632d15cc04146103d15780632f9c4bba146103f2578063302b687214610407578063326586521461042e5780633477ee2e1461044f5780634110a48914610467578063441a3e70146104b057806349e971be146104cb57806352b3ed16146104e057806358e7525f146104f55780635b6e3963146105165780635b860d27146105375780635c134d66146105585780636132cd831461057c57806367134e70146105945780636dd7d8ea146105b557806372e44a38146105c9578063a9a981a3146105ea578063a9ff959e146105ff578063ae6e43f514610614578063b642facd14610635578063c45607df14610656578063d09f1ab414610677578063d161c7671461068c578063d51b9e93146106a1578063d55b7dff146106c2578063ef18374a146106d7578063f2ee3c7d146106ec578063f5c951251461070d578063f8ac9dd51461072d575b600080fd5b6101f0600160a060020a0360043516610742565b005b3480156101fe57600080fd5b5061020a600435610a7e565b60408051600160a060020a039092168252519081900360200190f35b34801561023257600080fd5b506101f0600160a060020a0360043516602435610aa6565b34801561025657600080fd5b5061025f610d32565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561029b578181015183820152602001610283565b505050509050019250505060405180910390f35b3480156102bb57600080fd5b506102d6600160a060020a0360043581169060243516610d95565b604080519115158252519081900360200190f35b3480156102f657600080fd5b50610302600435610db5565b60408051918252519081900360200190f35b34801561032057600080fd5b50610338600160a060020a0360043516602435610dd4565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561037257818101518382015260200161035a565b50505050905090810190601f16801561039f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103b957600080fd5b5061020a600160a060020a0360043516602435610e8a565b3480156103dd57600080fd5b5061025f600160a060020a0360043516610ec1565b3480156103fe57600080fd5b5061025f610f37565b34801561041357600080fd5b50610302600160a060020a0360043581169060243516610f98565b34801561043a57600080fd5b50610338600160a060020a0360043516610fc7565b34801561045b57600080fd5b5061020a6004356110fd565b34801561047357600080fd5b50610488600160a060020a036004351661110b565b60408051600160a060020a039094168452911515602084015282820152519081900360600190f35b3480156104bc57600080fd5b506101f060043560243561113a565b3480156104d757600080fd5b50610302611396565b3480156104ec57600080fd5b5061025f61139c565b34801561050157600080fd5b50610302600160a060020a03600435166113fc565b34801561052257600080fd5b506102d6600160a060020a036004351661141b565b34801561054357600080fd5b50610302600160a060020a0360043516611430565b34801561056457600080fd5b5061020a600160a060020a03600435166024356114dc565b34801561058857600080fd5b5061020a6004356114f7565b3480156105a057600080fd5b50610302600160a060020a0360043516611505565b6101f0600160a060020a0360043516611520565b3480156105d557600080fd5b50610302600160a060020a036004351661178e565b3480156105f657600080fd5b506103026117a0565b34801561060b57600080fd5b506103026117a6565b34801561062057600080fd5b506101f0600160a060020a03600435166117ac565b34801561064157600080fd5b5061020a600160a060020a0360043516611b02565b34801561066257600080fd5b50610302600160a060020a0360043516611b20565b34801561068357600080fd5b50610302611b3b565b34801561069857600080fd5b50610302611b41565b3480156106ad57600080fd5b506102d6600160a060020a0360043516611b47565b3480156106ce57600080fd5b50610302611b6c565b3480156106e357600080fd5b50610302611b72565b3480156106f857600080fd5b506101f0600160a060020a0360043516611b78565b34801561071957600080fd5b506101f0600480356024810191013561211d565b34801561073957600080fd5b506103026121aa565b600080600a5434101515156107a1576040805160e560020a62461bcd02815260206004820152601160248201527f4c6f772043616e64696461746520436170000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038316600090815260016020526040902054839060a060020a900460ff161561081b576040805160e560020a62461bcd02815260206004820152601160248201527f416c72656164792043616e646964617465000000000000000000000000000000604482015290519081900360640190fd5b3360009081526010602052604090205460ff161515600114610887576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f74204772616e64204d617374657200000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038416600090815260016020819052604090912001546108b4903463ffffffff6121b016565b6008805460018181019092557ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3018054600160a060020a038816600160a060020a03199182168117909255600091825260208381526040808420805474ff0000000000000000000000000000000000000000199416339081179490941660a060020a1781559485018690559183526002840190529020549194509250610960903463ffffffff6121b016565b600160a060020a038516600090815260016020908152604080832033845260020182528083209390935560069052205415156109d957600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688018054600160a060020a031916331790555b336000818152600660209081526040808320805460018181018355918552838520018054600160a060020a038b16600160a060020a031991821681179092558186526002855283862080549384018155865294849020909101805490941685179093558051938452908301919091523482820152517f7635f1d87b47fba9f2b09e56eb4be75cca030e0cb179c1602ac9261d39a8f5c19181900360600190a150505050565b6007805482908110610a8c57fe5b600091825260209091200154600160a060020a0316905081565b600160a060020a038216600090815260016020908152604080832033845260020190915281205483908390811115610b28576040805160e560020a62461bcd02815260206004820152601560248201527f496e73756666696369656e7420566f7465204361700000000000000000000000604482015290519081900360640190fd5b600160a060020a0382811660009081526001602052604090205416331415610bda57600a54600160a060020a0383166000908152600160209081526040808320338452600201909152902054610b84908363ffffffff6121c616565b1015610bda576040805160e560020a62461bcd02815260206004820152600d60248201527f42656c6f77204d696e2043617000000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03851660009081526001602081905260409091200154610c07908563ffffffff6121c616565b600160a060020a038616600090815260016020818152604080842092830194909455338352600290910190522054610c45908563ffffffff6121c616565b600160a060020a0386166000908152600160209081526040808320338452600201909152902055600e54610c7f904363ffffffff6121b016565b33600090815260208181526040808320848452909152902054909350610cab908563ffffffff6121b016565b33600081815260208181526040808320888452808352818420959095558282526001948501805495860181558352918190209093018690558051918252600160a060020a0388169282019290925280820186905290517faa0e554f781c3c3b2be110a0557f260f11af9a8aa2c64bc1e7a31dbb21e32fa29181900360600190a15050505050565b60606008805480602002602001604051908101604052809291908181526020018280548015610d8a57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610d6c575b505050505090505b90565b600560209081526000928352604080842090915290825290205460ff1681565b336000908152602081815260408083208484529091529020545b919050565b600360205281600052604060002081815481101515610def57fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152945090925090830182828015610e825780601f10610e5757610100808354040283529160200191610e82565b820191906000526020600020905b815481529060010190602001808311610e6557829003601f168201915b505050505081565b600660205281600052604060002081815481101515610ea557fe5b600091825260209091200154600160a060020a03169150829050565b600160a060020a038116600090815260026020908152604091829020805483518184028101840190945280845260609392830182828015610f2b57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610f0d575b50505050509050919050565b3360009081526020818152604091829020600101805483518184028101840190945280845260609392830182828015610d8a57602002820191906000526020600020905b815481526020019060010190808311610f7b575050505050905090565b600160a060020a0391821660009081526001602090815260408083209390941682526002909201909152205490565b6060610fd282611b47565b156110d55760036000610fe484611b02565b600160a060020a0316600160a060020a0316815260200190815260200160002060016003600061101386611b02565b600160a060020a03168152602081019190915260400160002054825491900390811061103b57fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156110c95780601f1061109e576101008083540402835291602001916110c9565b820191906000526020600020905b8154815290600101906020018083116110ac57829003601f168201915b50505050509050610dcf565b600160a060020a03821660009081526003602052604090208054600019810190811061103b57fe5b6008805482908110610a8c57fe5b60016020819052600091825260409091208054910154600160a060020a0382169160a060020a900460ff169083565b60008282828211611195576040805160e560020a62461bcd02815260206004820152601460248201527f496e76616c696420426c6f636b204e756d626572000000000000000000000000604482015290519081900360640190fd5b438211156111ed576040805160e560020a62461bcd02815260206004820152601560248201527f426c6f636b204e756d62657220546f6f20486967680000000000000000000000604482015290519081900360640190fd5b336000908152602081815260408083208584529091528120541161125b576040805160e560020a62461bcd02815260206004820152601460248201527f496e76616c696420576974686472617720436170000000000000000000000000604482015290519081900360640190fd5b33600090815260208190526040902060010180548391908390811061127c57fe5b90600052602060002001541415156112de576040805160e560020a62461bcd02815260206004820152601560248201527f4d69736d6174636820426c6f636b204e756d6265720000000000000000000000604482015290519081900360640190fd5b336000818152602081815260408083208984528083529083208054908490559383529190526001018054919450908590811061131657fe5b60009182526020822001819055604051339185156108fc02918691818181858888f1935050505015801561134e573d6000803e3d6000fd5b50604080513381526020810187905280820185905290517ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360600190a15050505050565b60095481565b6060600f805480602002602001604051908101604052809291908181526020018280548015610d8a57602002820191906000526020600020908154600160a060020a03168152600190910190602001808311610d6c575050505050905090565b600160a060020a03166000908152600160208190526040909120015490565b60106020526000908152604090205460ff1681565b600160a060020a0381166000908152600160205260408120548190839060a060020a900460ff16151561149b576040805160e560020a62461bcd02815260206004820152601360248201526000805160206124be833981519152604482015290519081900360640190fd5b6114a484611b02565b91506114ae611b72565b600160a060020a0383166000908152600460205260409020546064028115156114d357fe5b04949350505050565b600260205281600052604060002081815481101515610ea557fe5b600f805482908110610a8c57fe5b600160a060020a031660009081526006602052604090205490565b600b5434101561157a576040805160e560020a62461bcd02815260206004820152600d60248201527f4c6f7720566f7465722043617000000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038116600090815260016020526040902054819060a060020a900460ff1615156115e3576040805160e560020a62461bcd02815260206004820152601360248201526000805160206124be833981519152604482015290519081900360640190fd5b3360009081526010602052604090205460ff16151560011461164f576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f74204772616e64204d617374657200000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0382166000908152600160208190526040909120015461167c903463ffffffff6121b016565b600160a060020a03831660009081526001602081815260408084209283019490945533835260029091019052205415156116e957600160a060020a0382166000908152600260209081526040822080546001810182559083529120018054600160a060020a031916331790555b600160a060020a0382166000908152600160209081526040808320338452600201909152902054611720903463ffffffff6121b016565b600160a060020a0383166000818152600160209081526040808320338085526002909101835292819020949094558351918252810191909152348183015290517f66a9138482c99e9baf08860110ef332cc0c23b4a199a53593d8db0fc8f96fbfc9181900360600190a15050565b60046020526000908152604090205481565b60085490565b600e5481565b600160a060020a038082166000908152600160205260408120549091829182918591163314611825576040805160e560020a62461bcd02815260206004820152600960248201527f4e6f74204f776e65720000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038516600090815260016020526040902054859060a060020a900460ff1615156118a0576040805160e560020a62461bcd02815260206004820152600d60248201527f4e6f742043616e64696461746500000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0386166000908152600160205260408120805474ff00000000000000000000000000000000000000001916905594505b60085485101561194c5785600160a060020a03166008868154811015156118fa57fe5b600091825260209091200154600160a060020a0316141561194157600880548690811061192357fe5b60009182526020909120018054600160a060020a031916905561194c565b6001909401936118d7565b6119af60088054806020026020016040519081016040528092919081815260200182805480156119a557602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611987575b50505050506121d8565b80516119c3916008916020909101906122fa565b506119cc61229c565b600160a060020a038616600081815260016020818152604080842033855260028101835290842054949093528190520154909450611a10908563ffffffff6121c616565b600160a060020a0387166000908152600160208181526040808420928301949094553383526002909101905290812055600d54611a53904363ffffffff6121b016565b33600090815260208181526040808320848452909152902054909350611a7f908563ffffffff6121b016565b33600081815260208181526040808320888452808352818420959095558282526001948501805495860181558352918190209093018690558051918252600160a060020a0389169282019290925281517f4edf3e325d0063213a39f9085522994a1c44bea5f39e7d63ef61260a1e58c6d3929181900390910190a1505050505050565b600160a060020a039081166000908152600160205260409020541690565b600160a060020a031660009081526003602052604090205490565b600c5481565b600d5481565b600160a060020a031660009081526001602052604090205460a060020a900460ff1690565b600a5481565b60075490565b336000818152600160205260408120549091829160609183918291829160a060020a900460ff161515611be3576040805160e560020a62461bcd02815260206004820152601360248201526000805160206124be833981519152604482015290519081900360640190fd5b600160a060020a038816600090815260016020526040902054889060a060020a900460ff161515611c4c576040805160e560020a62461bcd02815260206004820152601360248201526000805160206124be833981519152604482015290519081900360640190fd5b611c5533611b02565b9750611c6089611b02565b600160a060020a03808a1660009081526005602090815260408083209385168352929052205490975060ff1615611ce1576040805160e560020a62461bcd02815260206004820152601560248201527f416c726561647920566f74656420496e76616c69640000000000000000000000604482015290519081900360640190fd5b600160a060020a038089166000908152600560209081526040808320938b168352928152828220805460ff19166001908117909155600490915291902080549091019055604b611d2f611b72565b600160a060020a038916600090815260046020526040902054606402811515611d5457fe5b041061211257600160088054905003604051908082528060200260200182016040528015611d8c578160200160208202803883390190505b50955060009450600093505b600854841015611f145786600160a060020a0316611dd8600886815481101515611dbe57fe5b600091825260209091200154600160a060020a0316611b02565b600160a060020a03161415611f09576008805485908110611df557fe5b60009182526020909120015486516001870196600160a060020a039092169188918110611e1e57fe5b600160a060020a039092166020928302909101909101526008805485908110611e4357fe5b600091825260208220018054600160a060020a031916905560088054600192919087908110611e6e57fe5b6000918252602080832090910154600160a060020a0390811684528382019490945260409283018220805474ffffffffffffffffffffffffffffffffffffffffff19168155600101829055928a16815260039092528120611ece9161235f565b600160a060020a0387166000908152600660205260408120611eef91612380565b600160a060020a0387166000908152600460205260408120555b600190930192611d98565b611f7560088054806020026020016040519081016040528092919081815260200182805480156119a557602002820191906000526020600020908154600160a060020a031681526001909101906020018083116119875750505050506121d8565b8051611f89916008916020909101906122fa565b50611f9261229c565b600092505b60075483101561200c5786600160a060020a0316600784815481101515611fba57fe5b600091825260209091200154600160a060020a03161415612001576007805484908110611fe357fe5b60009182526020909120018054600160a060020a031916905561200c565b600190920191611f97565b61206d60078054806020026020016040519081016040528092919081815260200182805480156119a557602002820191906000526020600020908154600160a060020a031681526001909101906020018083116119875750505050506121d8565b8051612081916007916020909101906122fa565b507fe18d61a5bf4aa2ab40afc88aa9039d27ae17ff4ec1c65f5f414df6f02ce8b35e87876040518083600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156120fd5781810151838201526020016120e5565b50505050905001935050505060405180910390a15b505050505050505050565b33600090815260036020908152604082208054600181018083559184529190922061214a9101848461239e565b50506040805133808252602082018381529282018490527f949360d814b28a3b393a68909efe1fee120ee09cac30f360a0f80ab5415a611a9290918591859190606082018484808284376040519201829003965090945050505050a15050565b600b5481565b6000828201838110156121bf57fe5b9392505050565b6000828211156121d257fe5b50900390565b6060806000808451604051908082528060200260200182016040528015612209578160200160208202803883390190505b50925060009150600090505b845181101561229357845160009086908390811061222f57fe5b60209081029091010151600160a060020a03161461228b57848181518110151561225557fe5b90602001906020020151838381518110151561226d57fe5b600160a060020a039092166020928302909101909101526001909101905b600101612215565b50815292915050565b60095460085410156122f8576040805160e560020a62461bcd02815260206004820152601360248201527f4c6f772043616e64696461746520436f756e7400000000000000000000000000604482015290519081900360640190fd5b565b82805482825590600052602060002090810192821561234f579160200282015b8281111561234f5782518254600160a060020a031916600160a060020a0390911617825560209092019160019091019061231a565b5061235b929150612418565b5090565b508054600082559060005260206000209081019061237d919061243c565b50565b508054600082559060005260206000209081019061237d919061245f565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106123df5782800160ff1982351617855561240c565b8280016001018555821561240c579182015b8281111561240c5782358255916020019190600101906123f1565b5061235b92915061245f565b610d9291905b8082111561235b578054600160a060020a031916815560010161241e565b610d9291905b8082111561235b5760006124568282612479565b50600101612442565b610d9291905b8082111561235b5760008155600101612465565b50805460018160011615610100020316600290046000825580601f1061249f575061237d565b601f01602090049060005260206000209081019061237d919061245f56004e6f742056616c69642043616e64696461746500000000000000000000000000a165627a7a7230582066e183b30548c8470ddf44cf0a263594e7a273211523d4487293ec58fc8f13880029 \ No newline at end of file +0x6080604052600060085560006009553480156200001b57600080fd5b5060405162002aa238038062002aa283398101604090815281516020830151918301516060840151608085015160a086015160c087015160e08801516101008901516101208a0151600a819055600b879055600c869055600d859055600e849055600f839055978a018051600855600680546001808201835560009283527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f9091018054600160a060020a031916600160a060020a038c16179055600980549091019055909a998a01999798969795969495939492939190910191905b8a518110156200032f5760078b828151811015156200011357fe5b602090810291909101810151825460018082018555600094855293839020018054600160a060020a031916600160a060020a0392831617905560408051606081018252918d168252918101929092528b51908201908c90849081106200017557fe5b90602001906020020151815250600160008d848151811015156200019557fe5b602090810291909101810151600160a060020a03908116835282820193909352604091820160009081208551815493870151600160a060020a031990941695169490941760a060020a60ff02191674010000000000000000000000000000000000000000921515929092029190911783559201516001909101558b51600291908d90849081106200022257fe5b6020908102909101810151600160a060020a03908116835282820193909352604091820160009081208054600181018255908252828220018054948e16600160a060020a0319909516851790559283526005905290208b518c90839081106200028757fe5b6020908102919091018101518254600181018455600093845291909220018054600160a060020a031916600160a060020a0390921691909117905589518a9082908110620002d157fe5b90602001906020020151600160008d84815181101515620002ee57fe5b6020908102909101810151600160a060020a0390811683528282019390935260409182016000908120938e16815260029093019052902055600101620000f8565b5060005b8251811015620003d857601283828151811015156200034e57fe5b6020908102919091018101518254600180820185556000948552928420018054600160a060020a031916600160a060020a03909216919091179055845190916013918690859081106200039d57fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff191691151591909117905560010162000333565b50505050505050505050506126af80620003f36000396000f3006080604052600436106101e25763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630126795181146101e7578063025e7c27146101fd57806302aa9be21461023157806306a49fce146102555780630999ec79146102ba5780630db02622146102cf5780630e3e4fb8146102f657806315febd68146103315780632a3640b1146103495780632d15cc041461036d5780632f54bf6e1461038e5780632f9c4bba146103ca578063302b6872146103df5780633477ee2e146104065780634110a4891461041e578063441a3e701461046757806349e971be1461048257806358e7525f146104975780635b6e3963146104b85780635b860d27146104d95780635c134d66146104fa5780636132cd831461051e57806367134e7014610536578063681d8bf2146105575780636dd7d8ea1461056c57806372e44a3814610580578063a9a981a3146105a1578063a9ff959e146105b6578063ae6e43f5146105cb578063b622f141146105ec578063b642facd1461060d578063d09f1ab41461062e578063d161c76714610643578063d51b9e9314610658578063d55b7dff14610679578063db11daef1461068e578063ef18374a146106af578063f2ee3c7d146106c4578063f8ac9dd5146106e5575b600080fd5b6101fb600160a060020a03600435166106fa565b005b34801561020957600080fd5b50610215600435610ae7565b60408051600160a060020a039092168252519081900360200190f35b34801561023d57600080fd5b506101fb600160a060020a0360043516602435610b0f565b34801561026157600080fd5b5061026a610d9b565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102a657818101518382015260200161028e565b505050509050019250505060405180910390f35b3480156102c657600080fd5b506101fb610dfe565b3480156102db57600080fd5b506102e4610ee6565b60408051918252519081900360200190f35b34801561030257600080fd5b5061031d600160a060020a0360043581169060243516610eec565b604080519115158252519081900360200190f35b34801561033d57600080fd5b506102e4600435610f0c565b34801561035557600080fd5b50610215600160a060020a0360043516602435610f27565b34801561037957600080fd5b5061026a600160a060020a0360043516610f5e565b34801561039a57600080fd5b506103af600160a060020a0360043516610fd4565b60408051921515835260208301919091528051918290030190f35b3480156103d657600080fd5b5061026a611039565b3480156103eb57600080fd5b506102e4600160a060020a036004358116906024351661109a565b34801561041257600080fd5b506102156004356110c9565b34801561042a57600080fd5b5061043f600160a060020a03600435166110d7565b60408051600160a060020a039094168452911515602084015282820152519081900360600190f35b34801561047357600080fd5b506101fb600435602435611106565b34801561048e57600080fd5b506102e46113f1565b3480156104a357600080fd5b506102e4600160a060020a03600435166113f7565b3480156104c457600080fd5b5061031d600160a060020a0360043516611416565b3480156104e557600080fd5b506102e4600160a060020a036004351661142b565b34801561050657600080fd5b50610215600160a060020a0360043516602435611528565b34801561052a57600080fd5b50610215600435611543565b34801561054257600080fd5b506102e4600160a060020a0360043516611551565b34801561056357600080fd5b506101fb61156c565b6101fb600160a060020a036004351661164e565b34801561058c57600080fd5b506102e4600160a060020a036004351661191b565b3480156105ad57600080fd5b506102e461192d565b3480156105c257600080fd5b506102e4611933565b3480156105d757600080fd5b506101fb600160a060020a0360043516611939565b3480156105f857600080fd5b5061031d600160a060020a0360043516611d27565b34801561061957600080fd5b50610215600160a060020a0360043516611d3c565b34801561063a57600080fd5b506102e4611d5a565b34801561064f57600080fd5b506102e4611d60565b34801561066457600080fd5b5061031d600160a060020a0360043516611d66565b34801561068557600080fd5b506102e4611d8b565b34801561069a57600080fd5b5061031d600160a060020a0360043516611d91565b3480156106bb57600080fd5b506102e4611da6565b3480156106d057600080fd5b506101fb600160a060020a0360043516611dac565b3480156106f157600080fd5b506102e4612255565b600b54600090341015610757576040805160e560020a62461bcd02815260206004820152601560248201527f496e76616c69642043616e646964617465204361700000000000000000000000604482015290519081900360640190fd5b600160a060020a038216600090815260116020526040902054829060ff16156107b8576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612664833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460a060020a900460ff1615610830576040805160e560020a62461bcd02815260206004820152601360248201527f416c726561647920612063616e64696461746500000000000000000000000000604482015290519081900360640190fd5b3360009081526013602052604090205460ff16151560011461089c576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f74204772616e64204d617374657200000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038316600090815260016020819052604090912001546108c9903463ffffffff61225b16565b6007805460018181019092557fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688018054600160a060020a03808816600160a060020a03199283168117909355604080516060810182523380825260208281018881528385018a81526000988952898352858920945185549251151560a060020a0274ff00000000000000000000000000000000000000001991909816929098169190911796909616949094178255935195810195909555918352600290930190925220549092506109a0903463ffffffff61225b16565b600160a060020a0384166000908152600160208181526040808420338552600201909152909120919091556008546109dd9163ffffffff61225b16565b600855336000908152600560205260409020541515610a435760068054600181810183556000929092527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f018054600160a060020a031916331790556009805490910190555b336000818152600560209081526040808320805460018181018355918552838520018054600160a060020a038a16600160a060020a031991821681179092558186526002855283862080549384018155865294849020909101805490941685179093558051938452908301919091523482820152517f7635f1d87b47fba9f2b09e56eb4be75cca030e0cb179c1602ac9261d39a8f5c19181900360600190a1505050565b6006805482908110610af557fe5b600091825260209091200154600160a060020a0316905081565b600160a060020a038216600090815260016020908152604080832033845260020190915281205483908390811115610b91576040805160e560020a62461bcd02815260206004820152600c60248201527f496e76616c696420566f74650000000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0382811660009081526001602052604090205416331415610c4357600b54600160a060020a0383166000908152600160209081526040808320338452600201909152902054610bed908363ffffffff61227116565b1015610c43576040805160e560020a62461bcd02815260206004820181905260248201527f4d696e696d756d206361702073686f756c64206265206d61696e7461696e6564604482015290519081900360640190fd5b600160a060020a03851660009081526001602081905260409091200154610c70908563ffffffff61227116565b600160a060020a038616600090815260016020818152604080842092830194909455338352600290910190522054610cae908563ffffffff61227116565b600160a060020a0386166000908152600160209081526040808320338452600201909152902055600f54610ce8904363ffffffff61225b16565b33600090815260208181526040808320848452909152902054909350610d14908563ffffffff61225b16565b33600081815260208181526040808320888452808352818420959095558282526001948501805495860181558352918190209093018690558051918252600160a060020a0388169282019290925280820186905290517faa0e554f781c3c3b2be110a0557f260f11af9a8aa2c64bc1e7a31dbb21e32fa29181900360600190a15050505050565b60606007805480602002602001604051908101604052809291908181526020018280548015610df357602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610dd5575b505050505090505b90565b6060600080600780549050604051908082528060200260200182016040528015610e32578160200160208202803883390190505b50925060009150600090505b600754811015610ece57600780546000919083908110610e5a57fe5b600091825260209091200154600160a060020a031614610ec6576007805482908110610e8257fe5b6000918252602090912001548351600160a060020a0390911690849084908110610ea857fe5b600160a060020a039092166020928302909101909101526001909101905b600101610e3e565b818352610ee06007602085018461257b565b50505050565b60095481565b600460209081526000928352604080842090915290825290205460ff1681565b33600090815260208181526040808320938352929052205490565b600560205281600052604060002081815481101515610f4257fe5b600091825260209091200154600160a060020a03169150829050565b600160a060020a038116600090815260026020908152604091829020805483518184028101840190945280845260609392830182828015610fc857602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610faa575b50505050509050919050565b600080805b60065481101561102b5783600160a060020a0316600682815481101515610ffc57fe5b600091825260209091200154600160a060020a031614156110235760018192509250611033565b600101610fd9565b600092508291505b50915091565b3360009081526020818152604091829020600101805483518184028101840190945280845260609392830182828015610df357602002820191906000526020600020905b81548152602001906001019080831161107d575050505050905090565b600160a060020a0391821660009081526001602090815260408083209390941682526002909201909152205490565b6007805482908110610af557fe5b60016020819052600091825260409091208054910154600160a060020a0382169160a060020a900460ff169083565b336000908152601060205260408120548390839060ff1615611172576040805160e560020a62461bcd02815260206004820152600d60248201527f496e76616c6964204f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600082116111ca576040805160e560020a62461bcd02815260206004820152601460248201527f496e76616c696420626c6f636b206e756d626572000000000000000000000000604482015290519081900360640190fd5b43821115611248576040805160e560020a62461bcd02815260206004820152603560248201527f426c6f636b206e756d6265722073686f756c64206265206c657373207468616e60448201527f2063757272656e7420626c6f636b206e756d6265720000000000000000000000606482015290519081900360840190fd5b33600090815260208181526040808320858452909152812054116112b6576040805160e560020a62461bcd02815260206004820152601260248201527f4e6f2063617020746f2077697468647261770000000000000000000000000000604482015290519081900360640190fd5b3360009081526020819052604090206001018054839190839081106112d757fe5b9060005260206000200154141515611339576040805160e560020a62461bcd02815260206004820152600d60248201527f496e76616c696420696e64657800000000000000000000000000000000000000604482015290519081900360640190fd5b336000818152602081815260408083208984528083529083208054908490559383529190526001018054919450908590811061137157fe5b60009182526020822001819055604051339185156108fc02918691818181858888f193505050501580156113a9573d6000803e3d6000fd5b50604080513381526020810187905280820185905290517ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360600190a15050505050565b600a5481565b600160a060020a03166000908152600160208190526040909120015490565b60136020526000908152604090205460ff1681565b600160a060020a038116600090815260116020526040812054829060ff161561148c576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612664833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460a060020a900460ff1615156114f3576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612664833981519152604482015290519081900360640190fd5b6114fb611da6565b600160a060020a03841660009081526003602052604090205460640281151561152057fe5b049392505050565b600260205281600052604060002081815481101515610f4257fe5b6012805482908110610af557fe5b600160a060020a031660009081526005602052604090205490565b60606000806006805490506040519080825280602002602001820160405280156115a0578160200160208202803883390190505b50925060009150600090505b60065481101561163c576006805460009190839081106115c857fe5b600091825260209091200154600160a060020a0316146116345760068054829081106115f057fe5b6000918252602090912001548351600160a060020a039091169084908490811061161657fe5b600160a060020a039092166020928302909101909101526001909101905b6001016115ac565b818352610ee06006602085018461257b565b600c543410156116a8576040805160e560020a62461bcd02815260206004820152601160248201527f496e76616c696420566f74657220436170000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038116600090815260116020526040902054819060ff1615611709576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612664833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460a060020a900460ff161515611770576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612664833981519152604482015290519081900360640190fd5b3360009081526013602052604090205460ff1615156001146117dc576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f74204772616e64204d617374657200000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03821660009081526001602081905260409091200154611809903463ffffffff61225b16565b600160a060020a038316600090815260016020818152604080842092830194909455338352600290910190522054151561187657600160a060020a0382166000908152600260209081526040822080546001810182559083529120018054600160a060020a031916331790555b600160a060020a03821660009081526001602090815260408083203384526002019091529020546118ad903463ffffffff61225b16565b600160a060020a0383166000818152600160209081526040808320338085526002909101835292819020949094558351918252810191909152348183015290517f66a9138482c99e9baf08860110ef332cc0c23b4a199a53593d8db0fc8f96fbfc9181900360600190a15050565b60036020526000908152604090205481565b60085481565b600f5481565b600160a060020a038082166000908152600160205260408120549091829182918291829187911633146119dc576040805160e560020a62461bcd02815260206004820152602160248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f60448201527f6e00000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a038716600090815260016020526040902054879060a060020a900460ff161515611a7d576040805160e560020a62461bcd02815260206004820152602560248201527f4f6e6c792063616e6469646174652063616e2063616c6c20746869732066756e60448201527f6374696f6e000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0388166000908152600160208190526040909120805474ff000000000000000000000000000000000000000019169055600854611ac69163ffffffff61227116565b600855611ad288612283565b611ada612377565b3360009081526005602052604081208054909850965094505b85851015611bde5787600160a060020a03168786815481101515611b1357fe5b600091825260209091200154600160a060020a03161415611bd3578660018703815481101515611b3f57fe5b6000918252602090912001548754600160a060020a0390911690889087908110611b6557fe5b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a031602179055508660018703815481101515611ba457fe5b60009182526020909120018054600160a060020a03191690558654611bcd8860001983016125e0565b50611bde565b600190940193611af3565b86541515611bef57611bef336123d5565b600160a060020a038816600081815260016020818152604080842033855260028101835290842054949093528190520154909450611c33908563ffffffff61227116565b600160a060020a0389166000908152600160208181526040808420928301949094553383526002909101905290812055600e54611c76904363ffffffff61225b16565b33600090815260208181526040808320848452909152902054909350611ca2908563ffffffff61225b16565b33600081815260208181526040808320888452808352818420959095558282526001948501805495860181558352918190209093018690558051918252600160a060020a038b169282019290925281517f4edf3e325d0063213a39f9085522994a1c44bea5f39e7d63ef61260a1e58c6d3929181900390910190a15050505050505050565b60116020526000908152604090205460ff1681565b600160a060020a039081166000908152600160205260409020541690565b600d5481565b600e5481565b600160a060020a031660009081526001602052604090205460a060020a900460ff1690565b600b5481565b60106020526000908152604090205460ff1681565b60095490565b33600081815260116020526040812054909182918291829182916060918291849182919060ff1615611e16576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612664833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460a060020a900460ff161515611e7d576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612664833981519152604482015290519081900360640190fd5b611e8633611d3c565b9950600460008b600160a060020a0316600160a060020a0316815260200190815260200160002060008c600160a060020a0316600160a060020a0316815260200190815260200160002060009054906101000a900460ff16151515611f35576040805160e560020a62461bcd02815260206004820152600d60248201527f416c726561647920766f74656400000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03808b166000908152600460209081526040808320938f168352928152828220805460ff19166001908117909155600390915291902080549091019055604b611f83611da6565b600160a060020a038d16600090815260036020526040902054606402811515611fa857fe5b041061224857600160a060020a038b166000908152601060205260409020805460ff19166001179055611fda8b610fd4565b9850985088156122485760075460408051828152602080840282010190915260009850889750908015612017578160200160208202803883390190505b506007546040805182815260208084028201019091529196508015612046578160200160208202803883390190505b509350600092505b60075483101561218d57600780548490811061206657fe5b600091825260209091200154600160a060020a0390811692508b1661208a83611d3c565b600160a060020a03161415612156576008546120ad90600163ffffffff61227116565b60085584516001870196839187919081106120c457fe5b600160a060020a0392831660209182029092018101919091528382166000908152601182526040808220805460ff19166001908117909155808452818320805474ffffffffffffffffffffffffffffffffffffffffff1916815501829055928e168152600590915290812061213891612604565b600160a060020a038b16600090815260036020526040812055612182565b835160018801978391869190811061216a57fe5b600160a060020a039092166020928302909101909101525b60019092019161204e565b86845285855283516121a690600790602087019061257b565b506121af612377565b6121b8886124ce565b7fe18d61a5bf4aa2ab40afc88aa9039d27ae17ff4ec1c65f5f414df6f02ce8b35e8b866040518083600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561223357818101518382015260200161221b565b50505050905001935050505060405180910390a15b5050505050505050505050565b600c5481565b60008282018381101561226a57fe5b9392505050565b60008282111561227d57fe5b50900390565b60075460005b818110156123725782600160a060020a03166007828154811015156122aa57fe5b600091825260209091200154600160a060020a0316141561236a576007805460001984019081106122d757fe5b60009182526020909120015460078054600160a060020a0390921691839081106122fd57fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905560078054600019840190811061233857fe5b60009182526020909120018054600160a060020a031916905560078054906123649060001983016125e0565b50612372565b600101612289565b505050565b600a5460075410156123d3576040805160e560020a62461bcd02815260206004820152601360248201527f4c6f772043616e64696461746520436f756e7400000000000000000000000000604482015290519081900360640190fd5b565b60065460005b818110156123725782600160a060020a03166006828154811015156123fc57fe5b600091825260209091200154600160a060020a031614156124c65760068054600019840190811061242957fe5b60009182526020909120015460068054600160a060020a03909216918390811061244f57fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905560068054600019840190811061248a57fe5b60009182526020909120018054600160a060020a031916905560068054906124b69060001983016125e0565b5060098054600019019055612372565b6001016123db565b6006805460001981019190829081106124e357fe5b60009182526020909120015460068054600160a060020a03909216918490811061250957fe5b60009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055600680548290811061254057fe5b60009182526020909120018054600160a060020a0319169055600680549061256c9060001983016125e0565b50506009805460001901905550565b8280548282559060005260206000209081019282156125d0579160200282015b828111156125d05782518254600160a060020a031916600160a060020a0390911617825560209092019160019091019061259b565b506125dc929150612625565b5090565b81548183558181111561237257600083815260209020612372918101908301612649565b50805460008255906000526020600020908101906126229190612649565b50565b610dfb91905b808211156125dc578054600160a060020a031916815560010161262b565b610dfb91905b808211156125dc576000815560010161264f5600496e76616c69642043616e646964617465000000000000000000000000000000a165627a7a72305820a3c9003c2029e4c0361e562415306dfa5577554f6a337d6e48717a8dc7542e3d0029 \ No newline at end of file From bc95d6b44f91214deaadd9d9d03e9a86d08e7481 Mon Sep 17 00:00:00 2001 From: Galaxy <30950645+GalaxySciTech@users.noreply.github.com> Date: Wed, 7 Aug 2024 10:52:22 +0400 Subject: [PATCH 06/12] upadte --- contracts/validator/contract/validator.go | 32 +- contracts/validator/src/.gitignore | 6 +- contracts/validator/src/README.md | 2 +- contracts/validator/src/abi | 860 ------------------ contracts/validator/src/bytecode | 1 - .../validator/src/contracts/XDCValidator.sol | 4 + 6 files changed, 39 insertions(+), 866 deletions(-) delete mode 100644 contracts/validator/src/abi delete mode 100644 contracts/validator/src/bytecode diff --git a/contracts/validator/contract/validator.go b/contracts/validator/contract/validator.go index 2f783cd77..9ba8116aa 100644 --- a/contracts/validator/contract/validator.go +++ b/contracts/validator/contract/validator.go @@ -12,14 +12,14 @@ import ( "github.com/XinFinOrg/XDC-Subnet/common" "github.com/XinFinOrg/XDC-Subnet/core/types" "github.com/XinFinOrg/XDC-Subnet/event" - ethereum "github.com/XinFinOrg/XDC-Subnet" + "github.com/ethereum/go-ethereum" ) // XDCValidatorABI is the input ABI used to generate the binding from. -const XDCValidatorABI = "[{\"constant\":false,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"propose\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"owners\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"},{\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"unvote\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCandidates\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"removeCandidatesZeroAddresses\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ownerCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasVotedInvalid\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"getWithdrawCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"ownerToCandidate\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"getVoters\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"isOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getWithdrawBlockNumbers\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"},{\"name\":\"_voter\",\"type\":\"address\"}],\"name\":\"getVoterCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"candidates\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"validatorsState\",\"outputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"isCandidate\",\"type\":\"bool\"},{\"name\":\"cap\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_blockNumber\",\"type\":\"uint256\"},{\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minCandidateNum\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"getCandidateCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"grandMasterMap\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"invalidPercent\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"voters\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"grandMasters\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"getOwnerToCandidateLength\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"removeOwnersZeroAddresses\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"vote\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"invalidKYCCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"candidateCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"voterWithdrawDelay\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"resign\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"invalidCandidate\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"getCandidateOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"maxValidatorNumber\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"candidateWithdrawDelay\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"isCandidate\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minCandidateCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"invalidOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getOwnerCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"voteInvalidKYC\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minVoterCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_candidates\",\"type\":\"address[]\"},{\"name\":\"_caps\",\"type\":\"uint256[]\"},{\"name\":\"_firstOwner\",\"type\":\"address\"},{\"name\":\"_minCandidateCap\",\"type\":\"uint256\"},{\"name\":\"_minVoterCap\",\"type\":\"uint256\"},{\"name\":\"_maxValidatorNumber\",\"type\":\"uint256\"},{\"name\":\"_candidateWithdrawDelay\",\"type\":\"uint256\"},{\"name\":\"_voterWithdrawDelay\",\"type\":\"uint256\"},{\"name\":\"_grandMasters\",\"type\":\"address[]\"},{\"name\":\"_minCandidateNum\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_voter\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_candidate\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"Vote\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_voter\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_candidate\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"Unvote\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_candidate\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"Propose\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"Resign\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_blockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"kycHash\",\"type\":\"string\"}],\"name\":\"UploadedKYC\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_masternodeOwner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_masternodes\",\"type\":\"address[]\"}],\"name\":\"InvalidatedNode\",\"type\":\"event\"}]" +const XDCValidatorABI = "[{\"constant\":false,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"propose\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"owners\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"},{\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"unvote\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCandidates\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"removeCandidatesZeroAddresses\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ownerCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasVotedInvalid\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"getWithdrawCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"ownerToCandidate\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"getVoters\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"isOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getWithdrawBlockNumbers\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"},{\"name\":\"_voter\",\"type\":\"address\"}],\"name\":\"getVoterCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"candidates\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"validatorsState\",\"outputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"isCandidate\",\"type\":\"bool\"},{\"name\":\"cap\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_blockNumber\",\"type\":\"uint256\"},{\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minCandidateNum\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getGrandMasters\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"getCandidateCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"grandMasterMap\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"invalidPercent\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"voters\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"grandMasters\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"getOwnerToCandidateLength\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"removeOwnersZeroAddresses\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"vote\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"invalidKYCCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"candidateCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"voterWithdrawDelay\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"resign\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"invalidCandidate\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"getCandidateOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"maxValidatorNumber\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"candidateWithdrawDelay\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"isCandidate\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minCandidateCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"invalidOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getOwnerCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"voteInvalidKYC\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minVoterCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_candidates\",\"type\":\"address[]\"},{\"name\":\"_caps\",\"type\":\"uint256[]\"},{\"name\":\"_firstOwner\",\"type\":\"address\"},{\"name\":\"_minCandidateCap\",\"type\":\"uint256\"},{\"name\":\"_minVoterCap\",\"type\":\"uint256\"},{\"name\":\"_maxValidatorNumber\",\"type\":\"uint256\"},{\"name\":\"_candidateWithdrawDelay\",\"type\":\"uint256\"},{\"name\":\"_voterWithdrawDelay\",\"type\":\"uint256\"},{\"name\":\"_grandMasters\",\"type\":\"address[]\"},{\"name\":\"_minCandidateNum\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_voter\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_candidate\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"Vote\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_voter\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_candidate\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"Unvote\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_candidate\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"Propose\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"Resign\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_blockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"kycHash\",\"type\":\"string\"}],\"name\":\"UploadedKYC\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_masternodeOwner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_masternodes\",\"type\":\"address[]\"}],\"name\":\"InvalidatedNode\",\"type\":\"event\"}]" // XDCValidatorBin is the compiled bytecode used for deploying new contracts. -const XDCValidatorBin = `0x6080604052600060085560006009553480156200001b57600080fd5b5060405162002aa238038062002aa283398101604090815281516020830151918301516060840151608085015160a086015160c087015160e08801516101008901516101208a0151600a819055600b879055600c869055600d859055600e849055600f839055978a018051600855600680546001808201835560009283527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f9091018054600160a060020a031916600160a060020a038c16179055600980549091019055909a998a01999798969795969495939492939190910191905b8a518110156200032f5760078b828151811015156200011357fe5b602090810291909101810151825460018082018555600094855293839020018054600160a060020a031916600160a060020a0392831617905560408051606081018252918d168252918101929092528b51908201908c90849081106200017557fe5b90602001906020020151815250600160008d848151811015156200019557fe5b602090810291909101810151600160a060020a03908116835282820193909352604091820160009081208551815493870151600160a060020a031990941695169490941760a060020a60ff02191674010000000000000000000000000000000000000000921515929092029190911783559201516001909101558b51600291908d90849081106200022257fe5b6020908102909101810151600160a060020a03908116835282820193909352604091820160009081208054600181018255908252828220018054948e16600160a060020a0319909516851790559283526005905290208b518c90839081106200028757fe5b6020908102919091018101518254600181018455600093845291909220018054600160a060020a031916600160a060020a0390921691909117905589518a9082908110620002d157fe5b90602001906020020151600160008d84815181101515620002ee57fe5b6020908102909101810151600160a060020a0390811683528282019390935260409182016000908120938e16815260029093019052902055600101620000f8565b5060005b8251811015620003d857601283828151811015156200034e57fe5b6020908102919091018101518254600180820185556000948552928420018054600160a060020a031916600160a060020a03909216919091179055845190916013918690859081106200039d57fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff191691151591909117905560010162000333565b50505050505050505050506126af80620003f36000396000f3006080604052600436106101e25763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630126795181146101e7578063025e7c27146101fd57806302aa9be21461023157806306a49fce146102555780630999ec79146102ba5780630db02622146102cf5780630e3e4fb8146102f657806315febd68146103315780632a3640b1146103495780632d15cc041461036d5780632f54bf6e1461038e5780632f9c4bba146103ca578063302b6872146103df5780633477ee2e146104065780634110a4891461041e578063441a3e701461046757806349e971be1461048257806358e7525f146104975780635b6e3963146104b85780635b860d27146104d95780635c134d66146104fa5780636132cd831461051e57806367134e7014610536578063681d8bf2146105575780636dd7d8ea1461056c57806372e44a3814610580578063a9a981a3146105a1578063a9ff959e146105b6578063ae6e43f5146105cb578063b622f141146105ec578063b642facd1461060d578063d09f1ab41461062e578063d161c76714610643578063d51b9e9314610658578063d55b7dff14610679578063db11daef1461068e578063ef18374a146106af578063f2ee3c7d146106c4578063f8ac9dd5146106e5575b600080fd5b6101fb600160a060020a03600435166106fa565b005b34801561020957600080fd5b50610215600435610ae7565b60408051600160a060020a039092168252519081900360200190f35b34801561023d57600080fd5b506101fb600160a060020a0360043516602435610b0f565b34801561026157600080fd5b5061026a610d9b565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102a657818101518382015260200161028e565b505050509050019250505060405180910390f35b3480156102c657600080fd5b506101fb610dfe565b3480156102db57600080fd5b506102e4610ee6565b60408051918252519081900360200190f35b34801561030257600080fd5b5061031d600160a060020a0360043581169060243516610eec565b604080519115158252519081900360200190f35b34801561033d57600080fd5b506102e4600435610f0c565b34801561035557600080fd5b50610215600160a060020a0360043516602435610f27565b34801561037957600080fd5b5061026a600160a060020a0360043516610f5e565b34801561039a57600080fd5b506103af600160a060020a0360043516610fd4565b60408051921515835260208301919091528051918290030190f35b3480156103d657600080fd5b5061026a611039565b3480156103eb57600080fd5b506102e4600160a060020a036004358116906024351661109a565b34801561041257600080fd5b506102156004356110c9565b34801561042a57600080fd5b5061043f600160a060020a03600435166110d7565b60408051600160a060020a039094168452911515602084015282820152519081900360600190f35b34801561047357600080fd5b506101fb600435602435611106565b34801561048e57600080fd5b506102e46113f1565b3480156104a357600080fd5b506102e4600160a060020a03600435166113f7565b3480156104c457600080fd5b5061031d600160a060020a0360043516611416565b3480156104e557600080fd5b506102e4600160a060020a036004351661142b565b34801561050657600080fd5b50610215600160a060020a0360043516602435611528565b34801561052a57600080fd5b50610215600435611543565b34801561054257600080fd5b506102e4600160a060020a0360043516611551565b34801561056357600080fd5b506101fb61156c565b6101fb600160a060020a036004351661164e565b34801561058c57600080fd5b506102e4600160a060020a036004351661191b565b3480156105ad57600080fd5b506102e461192d565b3480156105c257600080fd5b506102e4611933565b3480156105d757600080fd5b506101fb600160a060020a0360043516611939565b3480156105f857600080fd5b5061031d600160a060020a0360043516611d27565b34801561061957600080fd5b50610215600160a060020a0360043516611d3c565b34801561063a57600080fd5b506102e4611d5a565b34801561064f57600080fd5b506102e4611d60565b34801561066457600080fd5b5061031d600160a060020a0360043516611d66565b34801561068557600080fd5b506102e4611d8b565b34801561069a57600080fd5b5061031d600160a060020a0360043516611d91565b3480156106bb57600080fd5b506102e4611da6565b3480156106d057600080fd5b506101fb600160a060020a0360043516611dac565b3480156106f157600080fd5b506102e4612255565b600b54600090341015610757576040805160e560020a62461bcd02815260206004820152601560248201527f496e76616c69642043616e646964617465204361700000000000000000000000604482015290519081900360640190fd5b600160a060020a038216600090815260116020526040902054829060ff16156107b8576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612664833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460a060020a900460ff1615610830576040805160e560020a62461bcd02815260206004820152601360248201527f416c726561647920612063616e64696461746500000000000000000000000000604482015290519081900360640190fd5b3360009081526013602052604090205460ff16151560011461089c576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f74204772616e64204d617374657200000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038316600090815260016020819052604090912001546108c9903463ffffffff61225b16565b6007805460018181019092557fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688018054600160a060020a03808816600160a060020a03199283168117909355604080516060810182523380825260208281018881528385018a81526000988952898352858920945185549251151560a060020a0274ff00000000000000000000000000000000000000001991909816929098169190911796909616949094178255935195810195909555918352600290930190925220549092506109a0903463ffffffff61225b16565b600160a060020a0384166000908152600160208181526040808420338552600201909152909120919091556008546109dd9163ffffffff61225b16565b600855336000908152600560205260409020541515610a435760068054600181810183556000929092527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f018054600160a060020a031916331790556009805490910190555b336000818152600560209081526040808320805460018181018355918552838520018054600160a060020a038a16600160a060020a031991821681179092558186526002855283862080549384018155865294849020909101805490941685179093558051938452908301919091523482820152517f7635f1d87b47fba9f2b09e56eb4be75cca030e0cb179c1602ac9261d39a8f5c19181900360600190a1505050565b6006805482908110610af557fe5b600091825260209091200154600160a060020a0316905081565b600160a060020a038216600090815260016020908152604080832033845260020190915281205483908390811115610b91576040805160e560020a62461bcd02815260206004820152600c60248201527f496e76616c696420566f74650000000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0382811660009081526001602052604090205416331415610c4357600b54600160a060020a0383166000908152600160209081526040808320338452600201909152902054610bed908363ffffffff61227116565b1015610c43576040805160e560020a62461bcd02815260206004820181905260248201527f4d696e696d756d206361702073686f756c64206265206d61696e7461696e6564604482015290519081900360640190fd5b600160a060020a03851660009081526001602081905260409091200154610c70908563ffffffff61227116565b600160a060020a038616600090815260016020818152604080842092830194909455338352600290910190522054610cae908563ffffffff61227116565b600160a060020a0386166000908152600160209081526040808320338452600201909152902055600f54610ce8904363ffffffff61225b16565b33600090815260208181526040808320848452909152902054909350610d14908563ffffffff61225b16565b33600081815260208181526040808320888452808352818420959095558282526001948501805495860181558352918190209093018690558051918252600160a060020a0388169282019290925280820186905290517faa0e554f781c3c3b2be110a0557f260f11af9a8aa2c64bc1e7a31dbb21e32fa29181900360600190a15050505050565b60606007805480602002602001604051908101604052809291908181526020018280548015610df357602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610dd5575b505050505090505b90565b6060600080600780549050604051908082528060200260200182016040528015610e32578160200160208202803883390190505b50925060009150600090505b600754811015610ece57600780546000919083908110610e5a57fe5b600091825260209091200154600160a060020a031614610ec6576007805482908110610e8257fe5b6000918252602090912001548351600160a060020a0390911690849084908110610ea857fe5b600160a060020a039092166020928302909101909101526001909101905b600101610e3e565b818352610ee06007602085018461257b565b50505050565b60095481565b600460209081526000928352604080842090915290825290205460ff1681565b33600090815260208181526040808320938352929052205490565b600560205281600052604060002081815481101515610f4257fe5b600091825260209091200154600160a060020a03169150829050565b600160a060020a038116600090815260026020908152604091829020805483518184028101840190945280845260609392830182828015610fc857602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610faa575b50505050509050919050565b600080805b60065481101561102b5783600160a060020a0316600682815481101515610ffc57fe5b600091825260209091200154600160a060020a031614156110235760018192509250611033565b600101610fd9565b600092508291505b50915091565b3360009081526020818152604091829020600101805483518184028101840190945280845260609392830182828015610df357602002820191906000526020600020905b81548152602001906001019080831161107d575050505050905090565b600160a060020a0391821660009081526001602090815260408083209390941682526002909201909152205490565b6007805482908110610af557fe5b60016020819052600091825260409091208054910154600160a060020a0382169160a060020a900460ff169083565b336000908152601060205260408120548390839060ff1615611172576040805160e560020a62461bcd02815260206004820152600d60248201527f496e76616c6964204f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600082116111ca576040805160e560020a62461bcd02815260206004820152601460248201527f496e76616c696420626c6f636b206e756d626572000000000000000000000000604482015290519081900360640190fd5b43821115611248576040805160e560020a62461bcd02815260206004820152603560248201527f426c6f636b206e756d6265722073686f756c64206265206c657373207468616e60448201527f2063757272656e7420626c6f636b206e756d6265720000000000000000000000606482015290519081900360840190fd5b33600090815260208181526040808320858452909152812054116112b6576040805160e560020a62461bcd02815260206004820152601260248201527f4e6f2063617020746f2077697468647261770000000000000000000000000000604482015290519081900360640190fd5b3360009081526020819052604090206001018054839190839081106112d757fe5b9060005260206000200154141515611339576040805160e560020a62461bcd02815260206004820152600d60248201527f496e76616c696420696e64657800000000000000000000000000000000000000604482015290519081900360640190fd5b336000818152602081815260408083208984528083529083208054908490559383529190526001018054919450908590811061137157fe5b60009182526020822001819055604051339185156108fc02918691818181858888f193505050501580156113a9573d6000803e3d6000fd5b50604080513381526020810187905280820185905290517ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360600190a15050505050565b600a5481565b600160a060020a03166000908152600160208190526040909120015490565b60136020526000908152604090205460ff1681565b600160a060020a038116600090815260116020526040812054829060ff161561148c576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612664833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460a060020a900460ff1615156114f3576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612664833981519152604482015290519081900360640190fd5b6114fb611da6565b600160a060020a03841660009081526003602052604090205460640281151561152057fe5b049392505050565b600260205281600052604060002081815481101515610f4257fe5b6012805482908110610af557fe5b600160a060020a031660009081526005602052604090205490565b60606000806006805490506040519080825280602002602001820160405280156115a0578160200160208202803883390190505b50925060009150600090505b60065481101561163c576006805460009190839081106115c857fe5b600091825260209091200154600160a060020a0316146116345760068054829081106115f057fe5b6000918252602090912001548351600160a060020a039091169084908490811061161657fe5b600160a060020a039092166020928302909101909101526001909101905b6001016115ac565b818352610ee06006602085018461257b565b600c543410156116a8576040805160e560020a62461bcd02815260206004820152601160248201527f496e76616c696420566f74657220436170000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038116600090815260116020526040902054819060ff1615611709576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612664833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460a060020a900460ff161515611770576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612664833981519152604482015290519081900360640190fd5b3360009081526013602052604090205460ff1615156001146117dc576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f74204772616e64204d617374657200000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03821660009081526001602081905260409091200154611809903463ffffffff61225b16565b600160a060020a038316600090815260016020818152604080842092830194909455338352600290910190522054151561187657600160a060020a0382166000908152600260209081526040822080546001810182559083529120018054600160a060020a031916331790555b600160a060020a03821660009081526001602090815260408083203384526002019091529020546118ad903463ffffffff61225b16565b600160a060020a0383166000818152600160209081526040808320338085526002909101835292819020949094558351918252810191909152348183015290517f66a9138482c99e9baf08860110ef332cc0c23b4a199a53593d8db0fc8f96fbfc9181900360600190a15050565b60036020526000908152604090205481565b60085481565b600f5481565b600160a060020a038082166000908152600160205260408120549091829182918291829187911633146119dc576040805160e560020a62461bcd02815260206004820152602160248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f60448201527f6e00000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a038716600090815260016020526040902054879060a060020a900460ff161515611a7d576040805160e560020a62461bcd02815260206004820152602560248201527f4f6e6c792063616e6469646174652063616e2063616c6c20746869732066756e60448201527f6374696f6e000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0388166000908152600160208190526040909120805474ff000000000000000000000000000000000000000019169055600854611ac69163ffffffff61227116565b600855611ad288612283565b611ada612377565b3360009081526005602052604081208054909850965094505b85851015611bde5787600160a060020a03168786815481101515611b1357fe5b600091825260209091200154600160a060020a03161415611bd3578660018703815481101515611b3f57fe5b6000918252602090912001548754600160a060020a0390911690889087908110611b6557fe5b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a031602179055508660018703815481101515611ba457fe5b60009182526020909120018054600160a060020a03191690558654611bcd8860001983016125e0565b50611bde565b600190940193611af3565b86541515611bef57611bef336123d5565b600160a060020a038816600081815260016020818152604080842033855260028101835290842054949093528190520154909450611c33908563ffffffff61227116565b600160a060020a0389166000908152600160208181526040808420928301949094553383526002909101905290812055600e54611c76904363ffffffff61225b16565b33600090815260208181526040808320848452909152902054909350611ca2908563ffffffff61225b16565b33600081815260208181526040808320888452808352818420959095558282526001948501805495860181558352918190209093018690558051918252600160a060020a038b169282019290925281517f4edf3e325d0063213a39f9085522994a1c44bea5f39e7d63ef61260a1e58c6d3929181900390910190a15050505050505050565b60116020526000908152604090205460ff1681565b600160a060020a039081166000908152600160205260409020541690565b600d5481565b600e5481565b600160a060020a031660009081526001602052604090205460a060020a900460ff1690565b600b5481565b60106020526000908152604090205460ff1681565b60095490565b33600081815260116020526040812054909182918291829182916060918291849182919060ff1615611e16576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612664833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460a060020a900460ff161515611e7d576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612664833981519152604482015290519081900360640190fd5b611e8633611d3c565b9950600460008b600160a060020a0316600160a060020a0316815260200190815260200160002060008c600160a060020a0316600160a060020a0316815260200190815260200160002060009054906101000a900460ff16151515611f35576040805160e560020a62461bcd02815260206004820152600d60248201527f416c726561647920766f74656400000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03808b166000908152600460209081526040808320938f168352928152828220805460ff19166001908117909155600390915291902080549091019055604b611f83611da6565b600160a060020a038d16600090815260036020526040902054606402811515611fa857fe5b041061224857600160a060020a038b166000908152601060205260409020805460ff19166001179055611fda8b610fd4565b9850985088156122485760075460408051828152602080840282010190915260009850889750908015612017578160200160208202803883390190505b506007546040805182815260208084028201019091529196508015612046578160200160208202803883390190505b509350600092505b60075483101561218d57600780548490811061206657fe5b600091825260209091200154600160a060020a0390811692508b1661208a83611d3c565b600160a060020a03161415612156576008546120ad90600163ffffffff61227116565b60085584516001870196839187919081106120c457fe5b600160a060020a0392831660209182029092018101919091528382166000908152601182526040808220805460ff19166001908117909155808452818320805474ffffffffffffffffffffffffffffffffffffffffff1916815501829055928e168152600590915290812061213891612604565b600160a060020a038b16600090815260036020526040812055612182565b835160018801978391869190811061216a57fe5b600160a060020a039092166020928302909101909101525b60019092019161204e565b86845285855283516121a690600790602087019061257b565b506121af612377565b6121b8886124ce565b7fe18d61a5bf4aa2ab40afc88aa9039d27ae17ff4ec1c65f5f414df6f02ce8b35e8b866040518083600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561223357818101518382015260200161221b565b50505050905001935050505060405180910390a15b5050505050505050505050565b600c5481565b60008282018381101561226a57fe5b9392505050565b60008282111561227d57fe5b50900390565b60075460005b818110156123725782600160a060020a03166007828154811015156122aa57fe5b600091825260209091200154600160a060020a0316141561236a576007805460001984019081106122d757fe5b60009182526020909120015460078054600160a060020a0390921691839081106122fd57fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905560078054600019840190811061233857fe5b60009182526020909120018054600160a060020a031916905560078054906123649060001983016125e0565b50612372565b600101612289565b505050565b600a5460075410156123d3576040805160e560020a62461bcd02815260206004820152601360248201527f4c6f772043616e64696461746520436f756e7400000000000000000000000000604482015290519081900360640190fd5b565b60065460005b818110156123725782600160a060020a03166006828154811015156123fc57fe5b600091825260209091200154600160a060020a031614156124c65760068054600019840190811061242957fe5b60009182526020909120015460068054600160a060020a03909216918390811061244f57fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905560068054600019840190811061248a57fe5b60009182526020909120018054600160a060020a031916905560068054906124b69060001983016125e0565b5060098054600019019055612372565b6001016123db565b6006805460001981019190829081106124e357fe5b60009182526020909120015460068054600160a060020a03909216918490811061250957fe5b60009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055600680548290811061254057fe5b60009182526020909120018054600160a060020a0319169055600680549061256c9060001983016125e0565b50506009805460001901905550565b8280548282559060005260206000209081019282156125d0579160200282015b828111156125d05782518254600160a060020a031916600160a060020a0390911617825560209092019160019091019061259b565b506125dc929150612625565b5090565b81548183558181111561237257600083815260209020612372918101908301612649565b50805460008255906000526020600020908101906126229190612649565b50565b610dfb91905b808211156125dc578054600160a060020a031916815560010161262b565b610dfb91905b808211156125dc576000815560010161264f5600496e76616c69642043616e646964617465000000000000000000000000000000a165627a7a72305820a3c9003c2029e4c0361e562415306dfa5577554f6a337d6e48717a8dc7542e3d0029` +const XDCValidatorBin = `0x6080604052600060085560006009553480156200001b57600080fd5b5060405162002b2238038062002b2283398101604090815281516020830151918301516060840151608085015160a086015160c087015160e08801516101008901516101208a0151600a819055600b879055600c869055600d859055600e849055600f839055978a018051600855600680546001808201835560009283527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f9091018054600160a060020a031916600160a060020a038c16179055600980549091019055909a998a01999798969795969495939492939190910191905b8a518110156200032f5760078b828151811015156200011357fe5b602090810291909101810151825460018082018555600094855293839020018054600160a060020a031916600160a060020a0392831617905560408051606081018252918d168252918101929092528b51908201908c90849081106200017557fe5b90602001906020020151815250600160008d848151811015156200019557fe5b602090810291909101810151600160a060020a03908116835282820193909352604091820160009081208551815493870151600160a060020a031990941695169490941760a060020a60ff02191674010000000000000000000000000000000000000000921515929092029190911783559201516001909101558b51600291908d90849081106200022257fe5b6020908102909101810151600160a060020a03908116835282820193909352604091820160009081208054600181018255908252828220018054948e16600160a060020a0319909516851790559283526005905290208b518c90839081106200028757fe5b6020908102919091018101518254600181018455600093845291909220018054600160a060020a031916600160a060020a0390921691909117905589518a9082908110620002d157fe5b90602001906020020151600160008d84815181101515620002ee57fe5b6020908102909101810151600160a060020a0390811683528282019390935260409182016000908120938e16815260029093019052902055600101620000f8565b5060005b8251811015620003d857601283828151811015156200034e57fe5b6020908102919091018101518254600180820185556000948552928420018054600160a060020a031916600160a060020a03909216919091179055845190916013918690859081106200039d57fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff191691151591909117905560010162000333565b505050505050505050505061272f80620003f36000396000f3006080604052600436106101ed5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630126795181146101f2578063025e7c271461020857806302aa9be21461023c57806306a49fce146102605780630999ec79146102c55780630db02622146102da5780630e3e4fb81461030157806315febd681461033c5780632a3640b1146103545780632d15cc04146103785780632f54bf6e146103995780632f9c4bba146103d5578063302b6872146103ea5780633477ee2e146104115780634110a48914610429578063441a3e701461047257806349e971be1461048d57806352b3ed16146104a257806358e7525f146104b75780635b6e3963146104d85780635b860d27146104f95780635c134d661461051a5780636132cd831461053e57806367134e7014610556578063681d8bf2146105775780636dd7d8ea1461058c57806372e44a38146105a0578063a9a981a3146105c1578063a9ff959e146105d6578063ae6e43f5146105eb578063b622f1411461060c578063b642facd1461062d578063d09f1ab41461064e578063d161c76714610663578063d51b9e9314610678578063d55b7dff14610699578063db11daef146106ae578063ef18374a146106cf578063f2ee3c7d146106e4578063f8ac9dd514610705575b600080fd5b610206600160a060020a036004351661071a565b005b34801561021457600080fd5b50610220600435610b07565b60408051600160a060020a039092168252519081900360200190f35b34801561024857600080fd5b50610206600160a060020a0360043516602435610b2f565b34801561026c57600080fd5b50610275610dbb565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102b1578181015183820152602001610299565b505050509050019250505060405180910390f35b3480156102d157600080fd5b50610206610e1e565b3480156102e657600080fd5b506102ef610f06565b60408051918252519081900360200190f35b34801561030d57600080fd5b50610328600160a060020a0360043581169060243516610f0c565b604080519115158252519081900360200190f35b34801561034857600080fd5b506102ef600435610f2c565b34801561036057600080fd5b50610220600160a060020a0360043516602435610f47565b34801561038457600080fd5b50610275600160a060020a0360043516610f7e565b3480156103a557600080fd5b506103ba600160a060020a0360043516610ff4565b60408051921515835260208301919091528051918290030190f35b3480156103e157600080fd5b50610275611059565b3480156103f657600080fd5b506102ef600160a060020a03600435811690602435166110ba565b34801561041d57600080fd5b506102206004356110e9565b34801561043557600080fd5b5061044a600160a060020a03600435166110f7565b60408051600160a060020a039094168452911515602084015282820152519081900360600190f35b34801561047e57600080fd5b50610206600435602435611126565b34801561049957600080fd5b506102ef611411565b3480156104ae57600080fd5b50610275611417565b3480156104c357600080fd5b506102ef600160a060020a0360043516611477565b3480156104e457600080fd5b50610328600160a060020a0360043516611496565b34801561050557600080fd5b506102ef600160a060020a03600435166114ab565b34801561052657600080fd5b50610220600160a060020a03600435166024356115a8565b34801561054a57600080fd5b506102206004356115c3565b34801561056257600080fd5b506102ef600160a060020a03600435166115d1565b34801561058357600080fd5b506102066115ec565b610206600160a060020a03600435166116ce565b3480156105ac57600080fd5b506102ef600160a060020a036004351661199b565b3480156105cd57600080fd5b506102ef6119ad565b3480156105e257600080fd5b506102ef6119b3565b3480156105f757600080fd5b50610206600160a060020a03600435166119b9565b34801561061857600080fd5b50610328600160a060020a0360043516611da7565b34801561063957600080fd5b50610220600160a060020a0360043516611dbc565b34801561065a57600080fd5b506102ef611dda565b34801561066f57600080fd5b506102ef611de0565b34801561068457600080fd5b50610328600160a060020a0360043516611de6565b3480156106a557600080fd5b506102ef611e0b565b3480156106ba57600080fd5b50610328600160a060020a0360043516611e11565b3480156106db57600080fd5b506102ef611e26565b3480156106f057600080fd5b50610206600160a060020a0360043516611e2c565b34801561071157600080fd5b506102ef6122d5565b600b54600090341015610777576040805160e560020a62461bcd02815260206004820152601560248201527f496e76616c69642043616e646964617465204361700000000000000000000000604482015290519081900360640190fd5b600160a060020a038216600090815260116020526040902054829060ff16156107d8576040805160e560020a62461bcd02815260206004820152601160248201526000805160206126e4833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460a060020a900460ff1615610850576040805160e560020a62461bcd02815260206004820152601360248201527f416c726561647920612063616e64696461746500000000000000000000000000604482015290519081900360640190fd5b3360009081526013602052604090205460ff1615156001146108bc576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f74204772616e64204d617374657200000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038316600090815260016020819052604090912001546108e9903463ffffffff6122db16565b6007805460018181019092557fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688018054600160a060020a03808816600160a060020a03199283168117909355604080516060810182523380825260208281018881528385018a81526000988952898352858920945185549251151560a060020a0274ff00000000000000000000000000000000000000001991909816929098169190911796909616949094178255935195810195909555918352600290930190925220549092506109c0903463ffffffff6122db16565b600160a060020a0384166000908152600160208181526040808420338552600201909152909120919091556008546109fd9163ffffffff6122db16565b600855336000908152600560205260409020541515610a635760068054600181810183556000929092527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f018054600160a060020a031916331790556009805490910190555b336000818152600560209081526040808320805460018181018355918552838520018054600160a060020a038a16600160a060020a031991821681179092558186526002855283862080549384018155865294849020909101805490941685179093558051938452908301919091523482820152517f7635f1d87b47fba9f2b09e56eb4be75cca030e0cb179c1602ac9261d39a8f5c19181900360600190a1505050565b6006805482908110610b1557fe5b600091825260209091200154600160a060020a0316905081565b600160a060020a038216600090815260016020908152604080832033845260020190915281205483908390811115610bb1576040805160e560020a62461bcd02815260206004820152600c60248201527f496e76616c696420566f74650000000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0382811660009081526001602052604090205416331415610c6357600b54600160a060020a0383166000908152600160209081526040808320338452600201909152902054610c0d908363ffffffff6122f116565b1015610c63576040805160e560020a62461bcd02815260206004820181905260248201527f4d696e696d756d206361702073686f756c64206265206d61696e7461696e6564604482015290519081900360640190fd5b600160a060020a03851660009081526001602081905260409091200154610c90908563ffffffff6122f116565b600160a060020a038616600090815260016020818152604080842092830194909455338352600290910190522054610cce908563ffffffff6122f116565b600160a060020a0386166000908152600160209081526040808320338452600201909152902055600f54610d08904363ffffffff6122db16565b33600090815260208181526040808320848452909152902054909350610d34908563ffffffff6122db16565b33600081815260208181526040808320888452808352818420959095558282526001948501805495860181558352918190209093018690558051918252600160a060020a0388169282019290925280820186905290517faa0e554f781c3c3b2be110a0557f260f11af9a8aa2c64bc1e7a31dbb21e32fa29181900360600190a15050505050565b60606007805480602002602001604051908101604052809291908181526020018280548015610e1357602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610df5575b505050505090505b90565b6060600080600780549050604051908082528060200260200182016040528015610e52578160200160208202803883390190505b50925060009150600090505b600754811015610eee57600780546000919083908110610e7a57fe5b600091825260209091200154600160a060020a031614610ee6576007805482908110610ea257fe5b6000918252602090912001548351600160a060020a0390911690849084908110610ec857fe5b600160a060020a039092166020928302909101909101526001909101905b600101610e5e565b818352610f00600760208501846125fb565b50505050565b60095481565b600460209081526000928352604080842090915290825290205460ff1681565b33600090815260208181526040808320938352929052205490565b600560205281600052604060002081815481101515610f6257fe5b600091825260209091200154600160a060020a03169150829050565b600160a060020a038116600090815260026020908152604091829020805483518184028101840190945280845260609392830182828015610fe857602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610fca575b50505050509050919050565b600080805b60065481101561104b5783600160a060020a031660068281548110151561101c57fe5b600091825260209091200154600160a060020a031614156110435760018192509250611053565b600101610ff9565b600092508291505b50915091565b3360009081526020818152604091829020600101805483518184028101840190945280845260609392830182828015610e1357602002820191906000526020600020905b81548152602001906001019080831161109d575050505050905090565b600160a060020a0391821660009081526001602090815260408083209390941682526002909201909152205490565b6007805482908110610b1557fe5b60016020819052600091825260409091208054910154600160a060020a0382169160a060020a900460ff169083565b336000908152601060205260408120548390839060ff1615611192576040805160e560020a62461bcd02815260206004820152600d60248201527f496e76616c6964204f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600082116111ea576040805160e560020a62461bcd02815260206004820152601460248201527f496e76616c696420626c6f636b206e756d626572000000000000000000000000604482015290519081900360640190fd5b43821115611268576040805160e560020a62461bcd02815260206004820152603560248201527f426c6f636b206e756d6265722073686f756c64206265206c657373207468616e60448201527f2063757272656e7420626c6f636b206e756d6265720000000000000000000000606482015290519081900360840190fd5b33600090815260208181526040808320858452909152812054116112d6576040805160e560020a62461bcd02815260206004820152601260248201527f4e6f2063617020746f2077697468647261770000000000000000000000000000604482015290519081900360640190fd5b3360009081526020819052604090206001018054839190839081106112f757fe5b9060005260206000200154141515611359576040805160e560020a62461bcd02815260206004820152600d60248201527f496e76616c696420696e64657800000000000000000000000000000000000000604482015290519081900360640190fd5b336000818152602081815260408083208984528083529083208054908490559383529190526001018054919450908590811061139157fe5b60009182526020822001819055604051339185156108fc02918691818181858888f193505050501580156113c9573d6000803e3d6000fd5b50604080513381526020810187905280820185905290517ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360600190a15050505050565b600a5481565b60606012805480602002602001604051908101604052809291908181526020018280548015610e1357602002820191906000526020600020908154600160a060020a03168152600190910190602001808311610df5575050505050905090565b600160a060020a03166000908152600160208190526040909120015490565b60136020526000908152604090205460ff1681565b600160a060020a038116600090815260116020526040812054829060ff161561150c576040805160e560020a62461bcd02815260206004820152601160248201526000805160206126e4833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460a060020a900460ff161515611573576040805160e560020a62461bcd02815260206004820152601160248201526000805160206126e4833981519152604482015290519081900360640190fd5b61157b611e26565b600160a060020a0384166000908152600360205260409020546064028115156115a057fe5b049392505050565b600260205281600052604060002081815481101515610f6257fe5b6012805482908110610b1557fe5b600160a060020a031660009081526005602052604090205490565b6060600080600680549050604051908082528060200260200182016040528015611620578160200160208202803883390190505b50925060009150600090505b6006548110156116bc5760068054600091908390811061164857fe5b600091825260209091200154600160a060020a0316146116b457600680548290811061167057fe5b6000918252602090912001548351600160a060020a039091169084908490811061169657fe5b600160a060020a039092166020928302909101909101526001909101905b60010161162c565b818352610f00600660208501846125fb565b600c54341015611728576040805160e560020a62461bcd02815260206004820152601160248201527f496e76616c696420566f74657220436170000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038116600090815260116020526040902054819060ff1615611789576040805160e560020a62461bcd02815260206004820152601160248201526000805160206126e4833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460a060020a900460ff1615156117f0576040805160e560020a62461bcd02815260206004820152601160248201526000805160206126e4833981519152604482015290519081900360640190fd5b3360009081526013602052604090205460ff16151560011461185c576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f74204772616e64204d617374657200000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03821660009081526001602081905260409091200154611889903463ffffffff6122db16565b600160a060020a03831660009081526001602081815260408084209283019490945533835260029091019052205415156118f657600160a060020a0382166000908152600260209081526040822080546001810182559083529120018054600160a060020a031916331790555b600160a060020a038216600090815260016020908152604080832033845260020190915290205461192d903463ffffffff6122db16565b600160a060020a0383166000818152600160209081526040808320338085526002909101835292819020949094558351918252810191909152348183015290517f66a9138482c99e9baf08860110ef332cc0c23b4a199a53593d8db0fc8f96fbfc9181900360600190a15050565b60036020526000908152604090205481565b60085481565b600f5481565b600160a060020a03808216600090815260016020526040812054909182918291829182918791163314611a5c576040805160e560020a62461bcd02815260206004820152602160248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f60448201527f6e00000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a038716600090815260016020526040902054879060a060020a900460ff161515611afd576040805160e560020a62461bcd02815260206004820152602560248201527f4f6e6c792063616e6469646174652063616e2063616c6c20746869732066756e60448201527f6374696f6e000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0388166000908152600160208190526040909120805474ff000000000000000000000000000000000000000019169055600854611b469163ffffffff6122f116565b600855611b5288612303565b611b5a6123f7565b3360009081526005602052604081208054909850965094505b85851015611c5e5787600160a060020a03168786815481101515611b9357fe5b600091825260209091200154600160a060020a03161415611c53578660018703815481101515611bbf57fe5b6000918252602090912001548754600160a060020a0390911690889087908110611be557fe5b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a031602179055508660018703815481101515611c2457fe5b60009182526020909120018054600160a060020a03191690558654611c4d886000198301612660565b50611c5e565b600190940193611b73565b86541515611c6f57611c6f33612455565b600160a060020a038816600081815260016020818152604080842033855260028101835290842054949093528190520154909450611cb3908563ffffffff6122f116565b600160a060020a0389166000908152600160208181526040808420928301949094553383526002909101905290812055600e54611cf6904363ffffffff6122db16565b33600090815260208181526040808320848452909152902054909350611d22908563ffffffff6122db16565b33600081815260208181526040808320888452808352818420959095558282526001948501805495860181558352918190209093018690558051918252600160a060020a038b169282019290925281517f4edf3e325d0063213a39f9085522994a1c44bea5f39e7d63ef61260a1e58c6d3929181900390910190a15050505050505050565b60116020526000908152604090205460ff1681565b600160a060020a039081166000908152600160205260409020541690565b600d5481565b600e5481565b600160a060020a031660009081526001602052604090205460a060020a900460ff1690565b600b5481565b60106020526000908152604090205460ff1681565b60095490565b33600081815260116020526040812054909182918291829182916060918291849182919060ff1615611e96576040805160e560020a62461bcd02815260206004820152601160248201526000805160206126e4833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460a060020a900460ff161515611efd576040805160e560020a62461bcd02815260206004820152601160248201526000805160206126e4833981519152604482015290519081900360640190fd5b611f0633611dbc565b9950600460008b600160a060020a0316600160a060020a0316815260200190815260200160002060008c600160a060020a0316600160a060020a0316815260200190815260200160002060009054906101000a900460ff16151515611fb5576040805160e560020a62461bcd02815260206004820152600d60248201527f416c726561647920766f74656400000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03808b166000908152600460209081526040808320938f168352928152828220805460ff19166001908117909155600390915291902080549091019055604b612003611e26565b600160a060020a038d1660009081526003602052604090205460640281151561202857fe5b04106122c857600160a060020a038b166000908152601060205260409020805460ff1916600117905561205a8b610ff4565b9850985088156122c85760075460408051828152602080840282010190915260009850889750908015612097578160200160208202803883390190505b5060075460408051828152602080840282010190915291965080156120c6578160200160208202803883390190505b509350600092505b60075483101561220d5760078054849081106120e657fe5b600091825260209091200154600160a060020a0390811692508b1661210a83611dbc565b600160a060020a031614156121d65760085461212d90600163ffffffff6122f116565b600855845160018701968391879190811061214457fe5b600160a060020a0392831660209182029092018101919091528382166000908152601182526040808220805460ff19166001908117909155808452818320805474ffffffffffffffffffffffffffffffffffffffffff1916815501829055928e16815260059091529081206121b891612684565b600160a060020a038b16600090815260036020526040812055612202565b83516001880197839186919081106121ea57fe5b600160a060020a039092166020928302909101909101525b6001909201916120ce565b86845285855283516122269060079060208701906125fb565b5061222f6123f7565b6122388861254e565b7fe18d61a5bf4aa2ab40afc88aa9039d27ae17ff4ec1c65f5f414df6f02ce8b35e8b866040518083600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156122b357818101518382015260200161229b565b50505050905001935050505060405180910390a15b5050505050505050505050565b600c5481565b6000828201838110156122ea57fe5b9392505050565b6000828211156122fd57fe5b50900390565b60075460005b818110156123f25782600160a060020a031660078281548110151561232a57fe5b600091825260209091200154600160a060020a031614156123ea5760078054600019840190811061235757fe5b60009182526020909120015460078054600160a060020a03909216918390811061237d57fe5b60009182526020909120018054600160a060020a031916600160a060020a03929092169190911790556007805460001984019081106123b857fe5b60009182526020909120018054600160a060020a031916905560078054906123e4906000198301612660565b506123f2565b600101612309565b505050565b600a546007541015612453576040805160e560020a62461bcd02815260206004820152601360248201527f4c6f772043616e64696461746520436f756e7400000000000000000000000000604482015290519081900360640190fd5b565b60065460005b818110156123f25782600160a060020a031660068281548110151561247c57fe5b600091825260209091200154600160a060020a03161415612546576006805460001984019081106124a957fe5b60009182526020909120015460068054600160a060020a0390921691839081106124cf57fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905560068054600019840190811061250a57fe5b60009182526020909120018054600160a060020a03191690556006805490612536906000198301612660565b50600980546000190190556123f2565b60010161245b565b60068054600019810191908290811061256357fe5b60009182526020909120015460068054600160a060020a03909216918490811061258957fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905560068054829081106125c057fe5b60009182526020909120018054600160a060020a031916905560068054906125ec906000198301612660565b50506009805460001901905550565b828054828255906000526020600020908101928215612650579160200282015b828111156126505782518254600160a060020a031916600160a060020a0390911617825560209092019160019091019061261b565b5061265c9291506126a5565b5090565b8154818355818111156123f2576000838152602090206123f29181019083016126c9565b50805460008255906000526020600020908101906126a291906126c9565b50565b610e1b91905b8082111561265c578054600160a060020a03191681556001016126ab565b610e1b91905b8082111561265c57600081556001016126cf5600496e76616c69642043616e646964617465000000000000000000000000000000a165627a7a72305820ed7e9fb085d4aa846efa4fdb646452f005346180fb9067a414f44a25368e00b30029` // DeployXDCValidator deploys a new Ethereum contract, binding an instance of XDCValidator to it. func DeployXDCValidator(auth *bind.TransactOpts, backend bind.ContractBackend, _candidates []common.Address, _caps []*big.Int, _firstOwner common.Address, _minCandidateCap *big.Int, _minVoterCap *big.Int, _maxValidatorNumber *big.Int, _candidateWithdrawDelay *big.Int, _voterWithdrawDelay *big.Int, _grandMasters []common.Address, _minCandidateNum *big.Int) (common.Address, *types.Transaction, *XDCValidator, error) { @@ -332,6 +332,32 @@ func (_XDCValidator *XDCValidatorCallerSession) GetCandidates() ([]common.Addres return _XDCValidator.Contract.GetCandidates(&_XDCValidator.CallOpts) } +// GetGrandMasters is a free data retrieval call binding the contract method 0x52b3ed16. +// +// Solidity: function getGrandMasters() constant returns(address[]) +func (_XDCValidator *XDCValidatorCaller) GetGrandMasters(opts *bind.CallOpts) ([]common.Address, error) { + var ( + ret0 = new([]common.Address) + ) + out := ret0 + err := _XDCValidator.contract.Call(opts, out, "getGrandMasters") + return *ret0, err +} + +// GetGrandMasters is a free data retrieval call binding the contract method 0x52b3ed16. +// +// Solidity: function getGrandMasters() constant returns(address[]) +func (_XDCValidator *XDCValidatorSession) GetGrandMasters() ([]common.Address, error) { + return _XDCValidator.Contract.GetGrandMasters(&_XDCValidator.CallOpts) +} + +// GetGrandMasters is a free data retrieval call binding the contract method 0x52b3ed16. +// +// Solidity: function getGrandMasters() constant returns(address[]) +func (_XDCValidator *XDCValidatorCallerSession) GetGrandMasters() ([]common.Address, error) { + return _XDCValidator.Contract.GetGrandMasters(&_XDCValidator.CallOpts) +} + // GetOwnerCount is a free data retrieval call binding the contract method 0xef18374a. // // Solidity: function getOwnerCount() constant returns(uint256) diff --git a/contracts/validator/src/.gitignore b/contracts/validator/src/.gitignore index 1ee02f4ea..cbdee4814 100644 --- a/contracts/validator/src/.gitignore +++ b/contracts/validator/src/.gitignore @@ -3,5 +3,9 @@ cache/ artifacts/ node_modules/ .vscode/ + +yarn.lock + +abi abigen -yarn.lock \ No newline at end of file +bytecode \ No newline at end of file diff --git a/contracts/validator/src/README.md b/contracts/validator/src/README.md index d11bd8c46..6fda07a7c 100644 --- a/contracts/validator/src/README.md +++ b/contracts/validator/src/README.md @@ -38,7 +38,7 @@ node scripts/deployToGenesis.js ./abigen --abi abi --bin bytecode --pkg contract --type XDCValidator --out ../contract/validator.go ``` -If you don't have `abigen`, compile it. It's in `cmd/abigen/main.go` in XDC main repo (or Geth repo). +If you don't have `abigen`, compile it. It's in `cmd/abigen/main.go` in XDC main repo (or Geth repo). and run `go build` 3. Go `../contract/validator.go` change `github.com/ethereum/go-ethereum` to `ethereum "github.com/XinFinOrg/XDC-Subnet"` diff --git a/contracts/validator/src/abi b/contracts/validator/src/abi deleted file mode 100644 index ff70dfc45..000000000 --- a/contracts/validator/src/abi +++ /dev/null @@ -1,860 +0,0 @@ -[ - { - "constant": false, - "inputs": [ - { - "name": "_candidate", - "type": "address" - } - ], - "name": "propose", - "outputs": [], - "payable": true, - "stateMutability": "payable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "", - "type": "uint256" - } - ], - "name": "owners", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_candidate", - "type": "address" - }, - { - "name": "_cap", - "type": "uint256" - } - ], - "name": "unvote", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getCandidates", - "outputs": [ - { - "name": "", - "type": "address[]" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "removeCandidatesZeroAddresses", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "ownerCount", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "", - "type": "address" - }, - { - "name": "", - "type": "address" - } - ], - "name": "hasVotedInvalid", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_blockNumber", - "type": "uint256" - } - ], - "name": "getWithdrawCap", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "", - "type": "address" - }, - { - "name": "", - "type": "uint256" - } - ], - "name": "ownerToCandidate", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_candidate", - "type": "address" - } - ], - "name": "getVoters", - "outputs": [ - { - "name": "", - "type": "address[]" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "owner", - "type": "address" - } - ], - "name": "isOwner", - "outputs": [ - { - "name": "", - "type": "bool" - }, - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getWithdrawBlockNumbers", - "outputs": [ - { - "name": "", - "type": "uint256[]" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_candidate", - "type": "address" - }, - { - "name": "_voter", - "type": "address" - } - ], - "name": "getVoterCap", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "", - "type": "uint256" - } - ], - "name": "candidates", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "", - "type": "address" - } - ], - "name": "validatorsState", - "outputs": [ - { - "name": "owner", - "type": "address" - }, - { - "name": "isCandidate", - "type": "bool" - }, - { - "name": "cap", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_blockNumber", - "type": "uint256" - }, - { - "name": "_index", - "type": "uint256" - } - ], - "name": "withdraw", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "minCandidateNum", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_candidate", - "type": "address" - } - ], - "name": "getCandidateCap", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "", - "type": "address" - } - ], - "name": "grandMasterMap", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_owner", - "type": "address" - } - ], - "name": "invalidPercent", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "", - "type": "address" - }, - { - "name": "", - "type": "uint256" - } - ], - "name": "voters", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "", - "type": "uint256" - } - ], - "name": "grandMasters", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_address", - "type": "address" - } - ], - "name": "getOwnerToCandidateLength", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "removeOwnersZeroAddresses", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_candidate", - "type": "address" - } - ], - "name": "vote", - "outputs": [], - "payable": true, - "stateMutability": "payable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "", - "type": "address" - } - ], - "name": "invalidKYCCount", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "candidateCount", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "voterWithdrawDelay", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_candidate", - "type": "address" - } - ], - "name": "resign", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "", - "type": "address" - } - ], - "name": "invalidCandidate", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_candidate", - "type": "address" - } - ], - "name": "getCandidateOwner", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "maxValidatorNumber", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "candidateWithdrawDelay", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_candidate", - "type": "address" - } - ], - "name": "isCandidate", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "minCandidateCap", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "", - "type": "address" - } - ], - "name": "invalidOwner", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getOwnerCount", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_owner", - "type": "address" - } - ], - "name": "voteInvalidKYC", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "minVoterCap", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "name": "_candidates", - "type": "address[]" - }, - { - "name": "_caps", - "type": "uint256[]" - }, - { - "name": "_firstOwner", - "type": "address" - }, - { - "name": "_minCandidateCap", - "type": "uint256" - }, - { - "name": "_minVoterCap", - "type": "uint256" - }, - { - "name": "_maxValidatorNumber", - "type": "uint256" - }, - { - "name": "_candidateWithdrawDelay", - "type": "uint256" - }, - { - "name": "_voterWithdrawDelay", - "type": "uint256" - }, - { - "name": "_grandMasters", - "type": "address[]" - }, - { - "name": "_minCandidateNum", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "_voter", - "type": "address" - }, - { - "indexed": false, - "name": "_candidate", - "type": "address" - }, - { - "indexed": false, - "name": "_cap", - "type": "uint256" - } - ], - "name": "Vote", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "_voter", - "type": "address" - }, - { - "indexed": false, - "name": "_candidate", - "type": "address" - }, - { - "indexed": false, - "name": "_cap", - "type": "uint256" - } - ], - "name": "Unvote", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "_owner", - "type": "address" - }, - { - "indexed": false, - "name": "_candidate", - "type": "address" - }, - { - "indexed": false, - "name": "_cap", - "type": "uint256" - } - ], - "name": "Propose", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "_owner", - "type": "address" - }, - { - "indexed": false, - "name": "_candidate", - "type": "address" - } - ], - "name": "Resign", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "_owner", - "type": "address" - }, - { - "indexed": false, - "name": "_blockNumber", - "type": "uint256" - }, - { - "indexed": false, - "name": "_cap", - "type": "uint256" - } - ], - "name": "Withdraw", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "_owner", - "type": "address" - }, - { - "indexed": false, - "name": "kycHash", - "type": "string" - } - ], - "name": "UploadedKYC", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "_masternodeOwner", - "type": "address" - }, - { - "indexed": false, - "name": "_masternodes", - "type": "address[]" - } - ], - "name": "InvalidatedNode", - "type": "event" - } -] \ No newline at end of file diff --git a/contracts/validator/src/bytecode b/contracts/validator/src/bytecode deleted file mode 100644 index 721b03309..000000000 --- a/contracts/validator/src/bytecode +++ /dev/null @@ -1 +0,0 @@ -0x6080604052600060085560006009553480156200001b57600080fd5b5060405162002aa238038062002aa283398101604090815281516020830151918301516060840151608085015160a086015160c087015160e08801516101008901516101208a0151600a819055600b879055600c869055600d859055600e849055600f839055978a018051600855600680546001808201835560009283527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f9091018054600160a060020a031916600160a060020a038c16179055600980549091019055909a998a01999798969795969495939492939190910191905b8a518110156200032f5760078b828151811015156200011357fe5b602090810291909101810151825460018082018555600094855293839020018054600160a060020a031916600160a060020a0392831617905560408051606081018252918d168252918101929092528b51908201908c90849081106200017557fe5b90602001906020020151815250600160008d848151811015156200019557fe5b602090810291909101810151600160a060020a03908116835282820193909352604091820160009081208551815493870151600160a060020a031990941695169490941760a060020a60ff02191674010000000000000000000000000000000000000000921515929092029190911783559201516001909101558b51600291908d90849081106200022257fe5b6020908102909101810151600160a060020a03908116835282820193909352604091820160009081208054600181018255908252828220018054948e16600160a060020a0319909516851790559283526005905290208b518c90839081106200028757fe5b6020908102919091018101518254600181018455600093845291909220018054600160a060020a031916600160a060020a0390921691909117905589518a9082908110620002d157fe5b90602001906020020151600160008d84815181101515620002ee57fe5b6020908102909101810151600160a060020a0390811683528282019390935260409182016000908120938e16815260029093019052902055600101620000f8565b5060005b8251811015620003d857601283828151811015156200034e57fe5b6020908102919091018101518254600180820185556000948552928420018054600160a060020a031916600160a060020a03909216919091179055845190916013918690859081106200039d57fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff191691151591909117905560010162000333565b50505050505050505050506126af80620003f36000396000f3006080604052600436106101e25763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630126795181146101e7578063025e7c27146101fd57806302aa9be21461023157806306a49fce146102555780630999ec79146102ba5780630db02622146102cf5780630e3e4fb8146102f657806315febd68146103315780632a3640b1146103495780632d15cc041461036d5780632f54bf6e1461038e5780632f9c4bba146103ca578063302b6872146103df5780633477ee2e146104065780634110a4891461041e578063441a3e701461046757806349e971be1461048257806358e7525f146104975780635b6e3963146104b85780635b860d27146104d95780635c134d66146104fa5780636132cd831461051e57806367134e7014610536578063681d8bf2146105575780636dd7d8ea1461056c57806372e44a3814610580578063a9a981a3146105a1578063a9ff959e146105b6578063ae6e43f5146105cb578063b622f141146105ec578063b642facd1461060d578063d09f1ab41461062e578063d161c76714610643578063d51b9e9314610658578063d55b7dff14610679578063db11daef1461068e578063ef18374a146106af578063f2ee3c7d146106c4578063f8ac9dd5146106e5575b600080fd5b6101fb600160a060020a03600435166106fa565b005b34801561020957600080fd5b50610215600435610ae7565b60408051600160a060020a039092168252519081900360200190f35b34801561023d57600080fd5b506101fb600160a060020a0360043516602435610b0f565b34801561026157600080fd5b5061026a610d9b565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102a657818101518382015260200161028e565b505050509050019250505060405180910390f35b3480156102c657600080fd5b506101fb610dfe565b3480156102db57600080fd5b506102e4610ee6565b60408051918252519081900360200190f35b34801561030257600080fd5b5061031d600160a060020a0360043581169060243516610eec565b604080519115158252519081900360200190f35b34801561033d57600080fd5b506102e4600435610f0c565b34801561035557600080fd5b50610215600160a060020a0360043516602435610f27565b34801561037957600080fd5b5061026a600160a060020a0360043516610f5e565b34801561039a57600080fd5b506103af600160a060020a0360043516610fd4565b60408051921515835260208301919091528051918290030190f35b3480156103d657600080fd5b5061026a611039565b3480156103eb57600080fd5b506102e4600160a060020a036004358116906024351661109a565b34801561041257600080fd5b506102156004356110c9565b34801561042a57600080fd5b5061043f600160a060020a03600435166110d7565b60408051600160a060020a039094168452911515602084015282820152519081900360600190f35b34801561047357600080fd5b506101fb600435602435611106565b34801561048e57600080fd5b506102e46113f1565b3480156104a357600080fd5b506102e4600160a060020a03600435166113f7565b3480156104c457600080fd5b5061031d600160a060020a0360043516611416565b3480156104e557600080fd5b506102e4600160a060020a036004351661142b565b34801561050657600080fd5b50610215600160a060020a0360043516602435611528565b34801561052a57600080fd5b50610215600435611543565b34801561054257600080fd5b506102e4600160a060020a0360043516611551565b34801561056357600080fd5b506101fb61156c565b6101fb600160a060020a036004351661164e565b34801561058c57600080fd5b506102e4600160a060020a036004351661191b565b3480156105ad57600080fd5b506102e461192d565b3480156105c257600080fd5b506102e4611933565b3480156105d757600080fd5b506101fb600160a060020a0360043516611939565b3480156105f857600080fd5b5061031d600160a060020a0360043516611d27565b34801561061957600080fd5b50610215600160a060020a0360043516611d3c565b34801561063a57600080fd5b506102e4611d5a565b34801561064f57600080fd5b506102e4611d60565b34801561066457600080fd5b5061031d600160a060020a0360043516611d66565b34801561068557600080fd5b506102e4611d8b565b34801561069a57600080fd5b5061031d600160a060020a0360043516611d91565b3480156106bb57600080fd5b506102e4611da6565b3480156106d057600080fd5b506101fb600160a060020a0360043516611dac565b3480156106f157600080fd5b506102e4612255565b600b54600090341015610757576040805160e560020a62461bcd02815260206004820152601560248201527f496e76616c69642043616e646964617465204361700000000000000000000000604482015290519081900360640190fd5b600160a060020a038216600090815260116020526040902054829060ff16156107b8576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612664833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460a060020a900460ff1615610830576040805160e560020a62461bcd02815260206004820152601360248201527f416c726561647920612063616e64696461746500000000000000000000000000604482015290519081900360640190fd5b3360009081526013602052604090205460ff16151560011461089c576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f74204772616e64204d617374657200000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038316600090815260016020819052604090912001546108c9903463ffffffff61225b16565b6007805460018181019092557fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688018054600160a060020a03808816600160a060020a03199283168117909355604080516060810182523380825260208281018881528385018a81526000988952898352858920945185549251151560a060020a0274ff00000000000000000000000000000000000000001991909816929098169190911796909616949094178255935195810195909555918352600290930190925220549092506109a0903463ffffffff61225b16565b600160a060020a0384166000908152600160208181526040808420338552600201909152909120919091556008546109dd9163ffffffff61225b16565b600855336000908152600560205260409020541515610a435760068054600181810183556000929092527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f018054600160a060020a031916331790556009805490910190555b336000818152600560209081526040808320805460018181018355918552838520018054600160a060020a038a16600160a060020a031991821681179092558186526002855283862080549384018155865294849020909101805490941685179093558051938452908301919091523482820152517f7635f1d87b47fba9f2b09e56eb4be75cca030e0cb179c1602ac9261d39a8f5c19181900360600190a1505050565b6006805482908110610af557fe5b600091825260209091200154600160a060020a0316905081565b600160a060020a038216600090815260016020908152604080832033845260020190915281205483908390811115610b91576040805160e560020a62461bcd02815260206004820152600c60248201527f496e76616c696420566f74650000000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0382811660009081526001602052604090205416331415610c4357600b54600160a060020a0383166000908152600160209081526040808320338452600201909152902054610bed908363ffffffff61227116565b1015610c43576040805160e560020a62461bcd02815260206004820181905260248201527f4d696e696d756d206361702073686f756c64206265206d61696e7461696e6564604482015290519081900360640190fd5b600160a060020a03851660009081526001602081905260409091200154610c70908563ffffffff61227116565b600160a060020a038616600090815260016020818152604080842092830194909455338352600290910190522054610cae908563ffffffff61227116565b600160a060020a0386166000908152600160209081526040808320338452600201909152902055600f54610ce8904363ffffffff61225b16565b33600090815260208181526040808320848452909152902054909350610d14908563ffffffff61225b16565b33600081815260208181526040808320888452808352818420959095558282526001948501805495860181558352918190209093018690558051918252600160a060020a0388169282019290925280820186905290517faa0e554f781c3c3b2be110a0557f260f11af9a8aa2c64bc1e7a31dbb21e32fa29181900360600190a15050505050565b60606007805480602002602001604051908101604052809291908181526020018280548015610df357602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610dd5575b505050505090505b90565b6060600080600780549050604051908082528060200260200182016040528015610e32578160200160208202803883390190505b50925060009150600090505b600754811015610ece57600780546000919083908110610e5a57fe5b600091825260209091200154600160a060020a031614610ec6576007805482908110610e8257fe5b6000918252602090912001548351600160a060020a0390911690849084908110610ea857fe5b600160a060020a039092166020928302909101909101526001909101905b600101610e3e565b818352610ee06007602085018461257b565b50505050565b60095481565b600460209081526000928352604080842090915290825290205460ff1681565b33600090815260208181526040808320938352929052205490565b600560205281600052604060002081815481101515610f4257fe5b600091825260209091200154600160a060020a03169150829050565b600160a060020a038116600090815260026020908152604091829020805483518184028101840190945280845260609392830182828015610fc857602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610faa575b50505050509050919050565b600080805b60065481101561102b5783600160a060020a0316600682815481101515610ffc57fe5b600091825260209091200154600160a060020a031614156110235760018192509250611033565b600101610fd9565b600092508291505b50915091565b3360009081526020818152604091829020600101805483518184028101840190945280845260609392830182828015610df357602002820191906000526020600020905b81548152602001906001019080831161107d575050505050905090565b600160a060020a0391821660009081526001602090815260408083209390941682526002909201909152205490565b6007805482908110610af557fe5b60016020819052600091825260409091208054910154600160a060020a0382169160a060020a900460ff169083565b336000908152601060205260408120548390839060ff1615611172576040805160e560020a62461bcd02815260206004820152600d60248201527f496e76616c6964204f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600082116111ca576040805160e560020a62461bcd02815260206004820152601460248201527f496e76616c696420626c6f636b206e756d626572000000000000000000000000604482015290519081900360640190fd5b43821115611248576040805160e560020a62461bcd02815260206004820152603560248201527f426c6f636b206e756d6265722073686f756c64206265206c657373207468616e60448201527f2063757272656e7420626c6f636b206e756d6265720000000000000000000000606482015290519081900360840190fd5b33600090815260208181526040808320858452909152812054116112b6576040805160e560020a62461bcd02815260206004820152601260248201527f4e6f2063617020746f2077697468647261770000000000000000000000000000604482015290519081900360640190fd5b3360009081526020819052604090206001018054839190839081106112d757fe5b9060005260206000200154141515611339576040805160e560020a62461bcd02815260206004820152600d60248201527f496e76616c696420696e64657800000000000000000000000000000000000000604482015290519081900360640190fd5b336000818152602081815260408083208984528083529083208054908490559383529190526001018054919450908590811061137157fe5b60009182526020822001819055604051339185156108fc02918691818181858888f193505050501580156113a9573d6000803e3d6000fd5b50604080513381526020810187905280820185905290517ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360600190a15050505050565b600a5481565b600160a060020a03166000908152600160208190526040909120015490565b60136020526000908152604090205460ff1681565b600160a060020a038116600090815260116020526040812054829060ff161561148c576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612664833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460a060020a900460ff1615156114f3576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612664833981519152604482015290519081900360640190fd5b6114fb611da6565b600160a060020a03841660009081526003602052604090205460640281151561152057fe5b049392505050565b600260205281600052604060002081815481101515610f4257fe5b6012805482908110610af557fe5b600160a060020a031660009081526005602052604090205490565b60606000806006805490506040519080825280602002602001820160405280156115a0578160200160208202803883390190505b50925060009150600090505b60065481101561163c576006805460009190839081106115c857fe5b600091825260209091200154600160a060020a0316146116345760068054829081106115f057fe5b6000918252602090912001548351600160a060020a039091169084908490811061161657fe5b600160a060020a039092166020928302909101909101526001909101905b6001016115ac565b818352610ee06006602085018461257b565b600c543410156116a8576040805160e560020a62461bcd02815260206004820152601160248201527f496e76616c696420566f74657220436170000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038116600090815260116020526040902054819060ff1615611709576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612664833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460a060020a900460ff161515611770576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612664833981519152604482015290519081900360640190fd5b3360009081526013602052604090205460ff1615156001146117dc576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f74204772616e64204d617374657200000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03821660009081526001602081905260409091200154611809903463ffffffff61225b16565b600160a060020a038316600090815260016020818152604080842092830194909455338352600290910190522054151561187657600160a060020a0382166000908152600260209081526040822080546001810182559083529120018054600160a060020a031916331790555b600160a060020a03821660009081526001602090815260408083203384526002019091529020546118ad903463ffffffff61225b16565b600160a060020a0383166000818152600160209081526040808320338085526002909101835292819020949094558351918252810191909152348183015290517f66a9138482c99e9baf08860110ef332cc0c23b4a199a53593d8db0fc8f96fbfc9181900360600190a15050565b60036020526000908152604090205481565b60085481565b600f5481565b600160a060020a038082166000908152600160205260408120549091829182918291829187911633146119dc576040805160e560020a62461bcd02815260206004820152602160248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f60448201527f6e00000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a038716600090815260016020526040902054879060a060020a900460ff161515611a7d576040805160e560020a62461bcd02815260206004820152602560248201527f4f6e6c792063616e6469646174652063616e2063616c6c20746869732066756e60448201527f6374696f6e000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0388166000908152600160208190526040909120805474ff000000000000000000000000000000000000000019169055600854611ac69163ffffffff61227116565b600855611ad288612283565b611ada612377565b3360009081526005602052604081208054909850965094505b85851015611bde5787600160a060020a03168786815481101515611b1357fe5b600091825260209091200154600160a060020a03161415611bd3578660018703815481101515611b3f57fe5b6000918252602090912001548754600160a060020a0390911690889087908110611b6557fe5b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a031602179055508660018703815481101515611ba457fe5b60009182526020909120018054600160a060020a03191690558654611bcd8860001983016125e0565b50611bde565b600190940193611af3565b86541515611bef57611bef336123d5565b600160a060020a038816600081815260016020818152604080842033855260028101835290842054949093528190520154909450611c33908563ffffffff61227116565b600160a060020a0389166000908152600160208181526040808420928301949094553383526002909101905290812055600e54611c76904363ffffffff61225b16565b33600090815260208181526040808320848452909152902054909350611ca2908563ffffffff61225b16565b33600081815260208181526040808320888452808352818420959095558282526001948501805495860181558352918190209093018690558051918252600160a060020a038b169282019290925281517f4edf3e325d0063213a39f9085522994a1c44bea5f39e7d63ef61260a1e58c6d3929181900390910190a15050505050505050565b60116020526000908152604090205460ff1681565b600160a060020a039081166000908152600160205260409020541690565b600d5481565b600e5481565b600160a060020a031660009081526001602052604090205460a060020a900460ff1690565b600b5481565b60106020526000908152604090205460ff1681565b60095490565b33600081815260116020526040812054909182918291829182916060918291849182919060ff1615611e16576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612664833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460a060020a900460ff161515611e7d576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612664833981519152604482015290519081900360640190fd5b611e8633611d3c565b9950600460008b600160a060020a0316600160a060020a0316815260200190815260200160002060008c600160a060020a0316600160a060020a0316815260200190815260200160002060009054906101000a900460ff16151515611f35576040805160e560020a62461bcd02815260206004820152600d60248201527f416c726561647920766f74656400000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03808b166000908152600460209081526040808320938f168352928152828220805460ff19166001908117909155600390915291902080549091019055604b611f83611da6565b600160a060020a038d16600090815260036020526040902054606402811515611fa857fe5b041061224857600160a060020a038b166000908152601060205260409020805460ff19166001179055611fda8b610fd4565b9850985088156122485760075460408051828152602080840282010190915260009850889750908015612017578160200160208202803883390190505b506007546040805182815260208084028201019091529196508015612046578160200160208202803883390190505b509350600092505b60075483101561218d57600780548490811061206657fe5b600091825260209091200154600160a060020a0390811692508b1661208a83611d3c565b600160a060020a03161415612156576008546120ad90600163ffffffff61227116565b60085584516001870196839187919081106120c457fe5b600160a060020a0392831660209182029092018101919091528382166000908152601182526040808220805460ff19166001908117909155808452818320805474ffffffffffffffffffffffffffffffffffffffffff1916815501829055928e168152600590915290812061213891612604565b600160a060020a038b16600090815260036020526040812055612182565b835160018801978391869190811061216a57fe5b600160a060020a039092166020928302909101909101525b60019092019161204e565b86845285855283516121a690600790602087019061257b565b506121af612377565b6121b8886124ce565b7fe18d61a5bf4aa2ab40afc88aa9039d27ae17ff4ec1c65f5f414df6f02ce8b35e8b866040518083600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561223357818101518382015260200161221b565b50505050905001935050505060405180910390a15b5050505050505050505050565b600c5481565b60008282018381101561226a57fe5b9392505050565b60008282111561227d57fe5b50900390565b60075460005b818110156123725782600160a060020a03166007828154811015156122aa57fe5b600091825260209091200154600160a060020a0316141561236a576007805460001984019081106122d757fe5b60009182526020909120015460078054600160a060020a0390921691839081106122fd57fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905560078054600019840190811061233857fe5b60009182526020909120018054600160a060020a031916905560078054906123649060001983016125e0565b50612372565b600101612289565b505050565b600a5460075410156123d3576040805160e560020a62461bcd02815260206004820152601360248201527f4c6f772043616e64696461746520436f756e7400000000000000000000000000604482015290519081900360640190fd5b565b60065460005b818110156123725782600160a060020a03166006828154811015156123fc57fe5b600091825260209091200154600160a060020a031614156124c65760068054600019840190811061242957fe5b60009182526020909120015460068054600160a060020a03909216918390811061244f57fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905560068054600019840190811061248a57fe5b60009182526020909120018054600160a060020a031916905560068054906124b69060001983016125e0565b5060098054600019019055612372565b6001016123db565b6006805460001981019190829081106124e357fe5b60009182526020909120015460068054600160a060020a03909216918490811061250957fe5b60009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055600680548290811061254057fe5b60009182526020909120018054600160a060020a0319169055600680549061256c9060001983016125e0565b50506009805460001901905550565b8280548282559060005260206000209081019282156125d0579160200282015b828111156125d05782518254600160a060020a031916600160a060020a0390911617825560209092019160019091019061259b565b506125dc929150612625565b5090565b81548183558181111561237257600083815260209020612372918101908301612649565b50805460008255906000526020600020908101906126229190612649565b50565b610dfb91905b808211156125dc578054600160a060020a031916815560010161262b565b610dfb91905b808211156125dc576000815560010161264f5600496e76616c69642043616e646964617465000000000000000000000000000000a165627a7a72305820a3c9003c2029e4c0361e562415306dfa5577554f6a337d6e48717a8dc7542e3d0029 \ No newline at end of file diff --git a/contracts/validator/src/contracts/XDCValidator.sol b/contracts/validator/src/contracts/XDCValidator.sol index ec12b9696..e8684cc52 100644 --- a/contracts/validator/src/contracts/XDCValidator.sol +++ b/contracts/validator/src/contracts/XDCValidator.sol @@ -510,4 +510,8 @@ contract XDCValidator { function checkMinCandidateNum() private view { require(candidates.length >= minCandidateNum, "Low Candidate Count"); } + + function getGrandMasters() public view returns (address[] memory) { + return grandMasters; + } } From 14beb42d7bc806fa3a6b114a4886c247acfcc0ba Mon Sep 17 00:00:00 2001 From: Galaxy <30950645+GalaxySciTech@users.noreply.github.com> Date: Wed, 7 Aug 2024 10:55:24 +0400 Subject: [PATCH 07/12] Update validator.go --- contracts/validator/contract/validator.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/validator/contract/validator.go b/contracts/validator/contract/validator.go index 9ba8116aa..191a2f607 100644 --- a/contracts/validator/contract/validator.go +++ b/contracts/validator/contract/validator.go @@ -12,7 +12,7 @@ import ( "github.com/XinFinOrg/XDC-Subnet/common" "github.com/XinFinOrg/XDC-Subnet/core/types" "github.com/XinFinOrg/XDC-Subnet/event" - "github.com/ethereum/go-ethereum" + ethereum "github.com/XinFinOrg/XDC-Subnet" ) // XDCValidatorABI is the input ABI used to generate the binding from. From d39554e2af6eeab037024cbbac2c6a71a6e5a0bf Mon Sep 17 00:00:00 2001 From: Galaxy <30950645+GalaxySciTech@users.noreply.github.com> Date: Wed, 7 Aug 2024 11:09:12 +0400 Subject: [PATCH 08/12] update --- contracts/validator/contract/validator.go | 2 +- .../validator/src/contracts/XDCValidator.sol | 9 ++++--- contracts/validator/validator_test.go | 2 ++ core/state/statedb_utils.go | 25 +++++++++---------- 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/contracts/validator/contract/validator.go b/contracts/validator/contract/validator.go index 191a2f607..d525061d9 100644 --- a/contracts/validator/contract/validator.go +++ b/contracts/validator/contract/validator.go @@ -19,7 +19,7 @@ import ( const XDCValidatorABI = "[{\"constant\":false,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"propose\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"owners\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"},{\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"unvote\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCandidates\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"removeCandidatesZeroAddresses\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ownerCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasVotedInvalid\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"getWithdrawCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"ownerToCandidate\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"getVoters\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"isOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getWithdrawBlockNumbers\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"},{\"name\":\"_voter\",\"type\":\"address\"}],\"name\":\"getVoterCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"candidates\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"validatorsState\",\"outputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"isCandidate\",\"type\":\"bool\"},{\"name\":\"cap\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_blockNumber\",\"type\":\"uint256\"},{\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minCandidateNum\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getGrandMasters\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"getCandidateCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"grandMasterMap\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"invalidPercent\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"voters\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"grandMasters\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"getOwnerToCandidateLength\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"removeOwnersZeroAddresses\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"vote\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"invalidKYCCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"candidateCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"voterWithdrawDelay\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"resign\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"invalidCandidate\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"getCandidateOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"maxValidatorNumber\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"candidateWithdrawDelay\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"isCandidate\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minCandidateCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"invalidOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getOwnerCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"voteInvalidKYC\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minVoterCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_candidates\",\"type\":\"address[]\"},{\"name\":\"_caps\",\"type\":\"uint256[]\"},{\"name\":\"_firstOwner\",\"type\":\"address\"},{\"name\":\"_minCandidateCap\",\"type\":\"uint256\"},{\"name\":\"_minVoterCap\",\"type\":\"uint256\"},{\"name\":\"_maxValidatorNumber\",\"type\":\"uint256\"},{\"name\":\"_candidateWithdrawDelay\",\"type\":\"uint256\"},{\"name\":\"_voterWithdrawDelay\",\"type\":\"uint256\"},{\"name\":\"_grandMasters\",\"type\":\"address[]\"},{\"name\":\"_minCandidateNum\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_voter\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_candidate\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"Vote\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_voter\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_candidate\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"Unvote\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_candidate\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"Propose\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"Resign\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_blockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"kycHash\",\"type\":\"string\"}],\"name\":\"UploadedKYC\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_masternodeOwner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_masternodes\",\"type\":\"address[]\"}],\"name\":\"InvalidatedNode\",\"type\":\"event\"}]" // XDCValidatorBin is the compiled bytecode used for deploying new contracts. -const XDCValidatorBin = `0x6080604052600060085560006009553480156200001b57600080fd5b5060405162002b2238038062002b2283398101604090815281516020830151918301516060840151608085015160a086015160c087015160e08801516101008901516101208a0151600a819055600b879055600c869055600d859055600e849055600f839055978a018051600855600680546001808201835560009283527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f9091018054600160a060020a031916600160a060020a038c16179055600980549091019055909a998a01999798969795969495939492939190910191905b8a518110156200032f5760078b828151811015156200011357fe5b602090810291909101810151825460018082018555600094855293839020018054600160a060020a031916600160a060020a0392831617905560408051606081018252918d168252918101929092528b51908201908c90849081106200017557fe5b90602001906020020151815250600160008d848151811015156200019557fe5b602090810291909101810151600160a060020a03908116835282820193909352604091820160009081208551815493870151600160a060020a031990941695169490941760a060020a60ff02191674010000000000000000000000000000000000000000921515929092029190911783559201516001909101558b51600291908d90849081106200022257fe5b6020908102909101810151600160a060020a03908116835282820193909352604091820160009081208054600181018255908252828220018054948e16600160a060020a0319909516851790559283526005905290208b518c90839081106200028757fe5b6020908102919091018101518254600181018455600093845291909220018054600160a060020a031916600160a060020a0390921691909117905589518a9082908110620002d157fe5b90602001906020020151600160008d84815181101515620002ee57fe5b6020908102909101810151600160a060020a0390811683528282019390935260409182016000908120938e16815260029093019052902055600101620000f8565b5060005b8251811015620003d857601283828151811015156200034e57fe5b6020908102919091018101518254600180820185556000948552928420018054600160a060020a031916600160a060020a03909216919091179055845190916013918690859081106200039d57fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff191691151591909117905560010162000333565b505050505050505050505061272f80620003f36000396000f3006080604052600436106101ed5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630126795181146101f2578063025e7c271461020857806302aa9be21461023c57806306a49fce146102605780630999ec79146102c55780630db02622146102da5780630e3e4fb81461030157806315febd681461033c5780632a3640b1146103545780632d15cc04146103785780632f54bf6e146103995780632f9c4bba146103d5578063302b6872146103ea5780633477ee2e146104115780634110a48914610429578063441a3e701461047257806349e971be1461048d57806352b3ed16146104a257806358e7525f146104b75780635b6e3963146104d85780635b860d27146104f95780635c134d661461051a5780636132cd831461053e57806367134e7014610556578063681d8bf2146105775780636dd7d8ea1461058c57806372e44a38146105a0578063a9a981a3146105c1578063a9ff959e146105d6578063ae6e43f5146105eb578063b622f1411461060c578063b642facd1461062d578063d09f1ab41461064e578063d161c76714610663578063d51b9e9314610678578063d55b7dff14610699578063db11daef146106ae578063ef18374a146106cf578063f2ee3c7d146106e4578063f8ac9dd514610705575b600080fd5b610206600160a060020a036004351661071a565b005b34801561021457600080fd5b50610220600435610b07565b60408051600160a060020a039092168252519081900360200190f35b34801561024857600080fd5b50610206600160a060020a0360043516602435610b2f565b34801561026c57600080fd5b50610275610dbb565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102b1578181015183820152602001610299565b505050509050019250505060405180910390f35b3480156102d157600080fd5b50610206610e1e565b3480156102e657600080fd5b506102ef610f06565b60408051918252519081900360200190f35b34801561030d57600080fd5b50610328600160a060020a0360043581169060243516610f0c565b604080519115158252519081900360200190f35b34801561034857600080fd5b506102ef600435610f2c565b34801561036057600080fd5b50610220600160a060020a0360043516602435610f47565b34801561038457600080fd5b50610275600160a060020a0360043516610f7e565b3480156103a557600080fd5b506103ba600160a060020a0360043516610ff4565b60408051921515835260208301919091528051918290030190f35b3480156103e157600080fd5b50610275611059565b3480156103f657600080fd5b506102ef600160a060020a03600435811690602435166110ba565b34801561041d57600080fd5b506102206004356110e9565b34801561043557600080fd5b5061044a600160a060020a03600435166110f7565b60408051600160a060020a039094168452911515602084015282820152519081900360600190f35b34801561047e57600080fd5b50610206600435602435611126565b34801561049957600080fd5b506102ef611411565b3480156104ae57600080fd5b50610275611417565b3480156104c357600080fd5b506102ef600160a060020a0360043516611477565b3480156104e457600080fd5b50610328600160a060020a0360043516611496565b34801561050557600080fd5b506102ef600160a060020a03600435166114ab565b34801561052657600080fd5b50610220600160a060020a03600435166024356115a8565b34801561054a57600080fd5b506102206004356115c3565b34801561056257600080fd5b506102ef600160a060020a03600435166115d1565b34801561058357600080fd5b506102066115ec565b610206600160a060020a03600435166116ce565b3480156105ac57600080fd5b506102ef600160a060020a036004351661199b565b3480156105cd57600080fd5b506102ef6119ad565b3480156105e257600080fd5b506102ef6119b3565b3480156105f757600080fd5b50610206600160a060020a03600435166119b9565b34801561061857600080fd5b50610328600160a060020a0360043516611da7565b34801561063957600080fd5b50610220600160a060020a0360043516611dbc565b34801561065a57600080fd5b506102ef611dda565b34801561066f57600080fd5b506102ef611de0565b34801561068457600080fd5b50610328600160a060020a0360043516611de6565b3480156106a557600080fd5b506102ef611e0b565b3480156106ba57600080fd5b50610328600160a060020a0360043516611e11565b3480156106db57600080fd5b506102ef611e26565b3480156106f057600080fd5b50610206600160a060020a0360043516611e2c565b34801561071157600080fd5b506102ef6122d5565b600b54600090341015610777576040805160e560020a62461bcd02815260206004820152601560248201527f496e76616c69642043616e646964617465204361700000000000000000000000604482015290519081900360640190fd5b600160a060020a038216600090815260116020526040902054829060ff16156107d8576040805160e560020a62461bcd02815260206004820152601160248201526000805160206126e4833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460a060020a900460ff1615610850576040805160e560020a62461bcd02815260206004820152601360248201527f416c726561647920612063616e64696461746500000000000000000000000000604482015290519081900360640190fd5b3360009081526013602052604090205460ff1615156001146108bc576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f74204772616e64204d617374657200000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038316600090815260016020819052604090912001546108e9903463ffffffff6122db16565b6007805460018181019092557fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688018054600160a060020a03808816600160a060020a03199283168117909355604080516060810182523380825260208281018881528385018a81526000988952898352858920945185549251151560a060020a0274ff00000000000000000000000000000000000000001991909816929098169190911796909616949094178255935195810195909555918352600290930190925220549092506109c0903463ffffffff6122db16565b600160a060020a0384166000908152600160208181526040808420338552600201909152909120919091556008546109fd9163ffffffff6122db16565b600855336000908152600560205260409020541515610a635760068054600181810183556000929092527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f018054600160a060020a031916331790556009805490910190555b336000818152600560209081526040808320805460018181018355918552838520018054600160a060020a038a16600160a060020a031991821681179092558186526002855283862080549384018155865294849020909101805490941685179093558051938452908301919091523482820152517f7635f1d87b47fba9f2b09e56eb4be75cca030e0cb179c1602ac9261d39a8f5c19181900360600190a1505050565b6006805482908110610b1557fe5b600091825260209091200154600160a060020a0316905081565b600160a060020a038216600090815260016020908152604080832033845260020190915281205483908390811115610bb1576040805160e560020a62461bcd02815260206004820152600c60248201527f496e76616c696420566f74650000000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0382811660009081526001602052604090205416331415610c6357600b54600160a060020a0383166000908152600160209081526040808320338452600201909152902054610c0d908363ffffffff6122f116565b1015610c63576040805160e560020a62461bcd02815260206004820181905260248201527f4d696e696d756d206361702073686f756c64206265206d61696e7461696e6564604482015290519081900360640190fd5b600160a060020a03851660009081526001602081905260409091200154610c90908563ffffffff6122f116565b600160a060020a038616600090815260016020818152604080842092830194909455338352600290910190522054610cce908563ffffffff6122f116565b600160a060020a0386166000908152600160209081526040808320338452600201909152902055600f54610d08904363ffffffff6122db16565b33600090815260208181526040808320848452909152902054909350610d34908563ffffffff6122db16565b33600081815260208181526040808320888452808352818420959095558282526001948501805495860181558352918190209093018690558051918252600160a060020a0388169282019290925280820186905290517faa0e554f781c3c3b2be110a0557f260f11af9a8aa2c64bc1e7a31dbb21e32fa29181900360600190a15050505050565b60606007805480602002602001604051908101604052809291908181526020018280548015610e1357602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610df5575b505050505090505b90565b6060600080600780549050604051908082528060200260200182016040528015610e52578160200160208202803883390190505b50925060009150600090505b600754811015610eee57600780546000919083908110610e7a57fe5b600091825260209091200154600160a060020a031614610ee6576007805482908110610ea257fe5b6000918252602090912001548351600160a060020a0390911690849084908110610ec857fe5b600160a060020a039092166020928302909101909101526001909101905b600101610e5e565b818352610f00600760208501846125fb565b50505050565b60095481565b600460209081526000928352604080842090915290825290205460ff1681565b33600090815260208181526040808320938352929052205490565b600560205281600052604060002081815481101515610f6257fe5b600091825260209091200154600160a060020a03169150829050565b600160a060020a038116600090815260026020908152604091829020805483518184028101840190945280845260609392830182828015610fe857602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610fca575b50505050509050919050565b600080805b60065481101561104b5783600160a060020a031660068281548110151561101c57fe5b600091825260209091200154600160a060020a031614156110435760018192509250611053565b600101610ff9565b600092508291505b50915091565b3360009081526020818152604091829020600101805483518184028101840190945280845260609392830182828015610e1357602002820191906000526020600020905b81548152602001906001019080831161109d575050505050905090565b600160a060020a0391821660009081526001602090815260408083209390941682526002909201909152205490565b6007805482908110610b1557fe5b60016020819052600091825260409091208054910154600160a060020a0382169160a060020a900460ff169083565b336000908152601060205260408120548390839060ff1615611192576040805160e560020a62461bcd02815260206004820152600d60248201527f496e76616c6964204f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600082116111ea576040805160e560020a62461bcd02815260206004820152601460248201527f496e76616c696420626c6f636b206e756d626572000000000000000000000000604482015290519081900360640190fd5b43821115611268576040805160e560020a62461bcd02815260206004820152603560248201527f426c6f636b206e756d6265722073686f756c64206265206c657373207468616e60448201527f2063757272656e7420626c6f636b206e756d6265720000000000000000000000606482015290519081900360840190fd5b33600090815260208181526040808320858452909152812054116112d6576040805160e560020a62461bcd02815260206004820152601260248201527f4e6f2063617020746f2077697468647261770000000000000000000000000000604482015290519081900360640190fd5b3360009081526020819052604090206001018054839190839081106112f757fe5b9060005260206000200154141515611359576040805160e560020a62461bcd02815260206004820152600d60248201527f496e76616c696420696e64657800000000000000000000000000000000000000604482015290519081900360640190fd5b336000818152602081815260408083208984528083529083208054908490559383529190526001018054919450908590811061139157fe5b60009182526020822001819055604051339185156108fc02918691818181858888f193505050501580156113c9573d6000803e3d6000fd5b50604080513381526020810187905280820185905290517ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360600190a15050505050565b600a5481565b60606012805480602002602001604051908101604052809291908181526020018280548015610e1357602002820191906000526020600020908154600160a060020a03168152600190910190602001808311610df5575050505050905090565b600160a060020a03166000908152600160208190526040909120015490565b60136020526000908152604090205460ff1681565b600160a060020a038116600090815260116020526040812054829060ff161561150c576040805160e560020a62461bcd02815260206004820152601160248201526000805160206126e4833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460a060020a900460ff161515611573576040805160e560020a62461bcd02815260206004820152601160248201526000805160206126e4833981519152604482015290519081900360640190fd5b61157b611e26565b600160a060020a0384166000908152600360205260409020546064028115156115a057fe5b049392505050565b600260205281600052604060002081815481101515610f6257fe5b6012805482908110610b1557fe5b600160a060020a031660009081526005602052604090205490565b6060600080600680549050604051908082528060200260200182016040528015611620578160200160208202803883390190505b50925060009150600090505b6006548110156116bc5760068054600091908390811061164857fe5b600091825260209091200154600160a060020a0316146116b457600680548290811061167057fe5b6000918252602090912001548351600160a060020a039091169084908490811061169657fe5b600160a060020a039092166020928302909101909101526001909101905b60010161162c565b818352610f00600660208501846125fb565b600c54341015611728576040805160e560020a62461bcd02815260206004820152601160248201527f496e76616c696420566f74657220436170000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038116600090815260116020526040902054819060ff1615611789576040805160e560020a62461bcd02815260206004820152601160248201526000805160206126e4833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460a060020a900460ff1615156117f0576040805160e560020a62461bcd02815260206004820152601160248201526000805160206126e4833981519152604482015290519081900360640190fd5b3360009081526013602052604090205460ff16151560011461185c576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f74204772616e64204d617374657200000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03821660009081526001602081905260409091200154611889903463ffffffff6122db16565b600160a060020a03831660009081526001602081815260408084209283019490945533835260029091019052205415156118f657600160a060020a0382166000908152600260209081526040822080546001810182559083529120018054600160a060020a031916331790555b600160a060020a038216600090815260016020908152604080832033845260020190915290205461192d903463ffffffff6122db16565b600160a060020a0383166000818152600160209081526040808320338085526002909101835292819020949094558351918252810191909152348183015290517f66a9138482c99e9baf08860110ef332cc0c23b4a199a53593d8db0fc8f96fbfc9181900360600190a15050565b60036020526000908152604090205481565b60085481565b600f5481565b600160a060020a03808216600090815260016020526040812054909182918291829182918791163314611a5c576040805160e560020a62461bcd02815260206004820152602160248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f60448201527f6e00000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a038716600090815260016020526040902054879060a060020a900460ff161515611afd576040805160e560020a62461bcd02815260206004820152602560248201527f4f6e6c792063616e6469646174652063616e2063616c6c20746869732066756e60448201527f6374696f6e000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0388166000908152600160208190526040909120805474ff000000000000000000000000000000000000000019169055600854611b469163ffffffff6122f116565b600855611b5288612303565b611b5a6123f7565b3360009081526005602052604081208054909850965094505b85851015611c5e5787600160a060020a03168786815481101515611b9357fe5b600091825260209091200154600160a060020a03161415611c53578660018703815481101515611bbf57fe5b6000918252602090912001548754600160a060020a0390911690889087908110611be557fe5b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a031602179055508660018703815481101515611c2457fe5b60009182526020909120018054600160a060020a03191690558654611c4d886000198301612660565b50611c5e565b600190940193611b73565b86541515611c6f57611c6f33612455565b600160a060020a038816600081815260016020818152604080842033855260028101835290842054949093528190520154909450611cb3908563ffffffff6122f116565b600160a060020a0389166000908152600160208181526040808420928301949094553383526002909101905290812055600e54611cf6904363ffffffff6122db16565b33600090815260208181526040808320848452909152902054909350611d22908563ffffffff6122db16565b33600081815260208181526040808320888452808352818420959095558282526001948501805495860181558352918190209093018690558051918252600160a060020a038b169282019290925281517f4edf3e325d0063213a39f9085522994a1c44bea5f39e7d63ef61260a1e58c6d3929181900390910190a15050505050505050565b60116020526000908152604090205460ff1681565b600160a060020a039081166000908152600160205260409020541690565b600d5481565b600e5481565b600160a060020a031660009081526001602052604090205460a060020a900460ff1690565b600b5481565b60106020526000908152604090205460ff1681565b60095490565b33600081815260116020526040812054909182918291829182916060918291849182919060ff1615611e96576040805160e560020a62461bcd02815260206004820152601160248201526000805160206126e4833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460a060020a900460ff161515611efd576040805160e560020a62461bcd02815260206004820152601160248201526000805160206126e4833981519152604482015290519081900360640190fd5b611f0633611dbc565b9950600460008b600160a060020a0316600160a060020a0316815260200190815260200160002060008c600160a060020a0316600160a060020a0316815260200190815260200160002060009054906101000a900460ff16151515611fb5576040805160e560020a62461bcd02815260206004820152600d60248201527f416c726561647920766f74656400000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03808b166000908152600460209081526040808320938f168352928152828220805460ff19166001908117909155600390915291902080549091019055604b612003611e26565b600160a060020a038d1660009081526003602052604090205460640281151561202857fe5b04106122c857600160a060020a038b166000908152601060205260409020805460ff1916600117905561205a8b610ff4565b9850985088156122c85760075460408051828152602080840282010190915260009850889750908015612097578160200160208202803883390190505b5060075460408051828152602080840282010190915291965080156120c6578160200160208202803883390190505b509350600092505b60075483101561220d5760078054849081106120e657fe5b600091825260209091200154600160a060020a0390811692508b1661210a83611dbc565b600160a060020a031614156121d65760085461212d90600163ffffffff6122f116565b600855845160018701968391879190811061214457fe5b600160a060020a0392831660209182029092018101919091528382166000908152601182526040808220805460ff19166001908117909155808452818320805474ffffffffffffffffffffffffffffffffffffffffff1916815501829055928e16815260059091529081206121b891612684565b600160a060020a038b16600090815260036020526040812055612202565b83516001880197839186919081106121ea57fe5b600160a060020a039092166020928302909101909101525b6001909201916120ce565b86845285855283516122269060079060208701906125fb565b5061222f6123f7565b6122388861254e565b7fe18d61a5bf4aa2ab40afc88aa9039d27ae17ff4ec1c65f5f414df6f02ce8b35e8b866040518083600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156122b357818101518382015260200161229b565b50505050905001935050505060405180910390a15b5050505050505050505050565b600c5481565b6000828201838110156122ea57fe5b9392505050565b6000828211156122fd57fe5b50900390565b60075460005b818110156123f25782600160a060020a031660078281548110151561232a57fe5b600091825260209091200154600160a060020a031614156123ea5760078054600019840190811061235757fe5b60009182526020909120015460078054600160a060020a03909216918390811061237d57fe5b60009182526020909120018054600160a060020a031916600160a060020a03929092169190911790556007805460001984019081106123b857fe5b60009182526020909120018054600160a060020a031916905560078054906123e4906000198301612660565b506123f2565b600101612309565b505050565b600a546007541015612453576040805160e560020a62461bcd02815260206004820152601360248201527f4c6f772043616e64696461746520436f756e7400000000000000000000000000604482015290519081900360640190fd5b565b60065460005b818110156123f25782600160a060020a031660068281548110151561247c57fe5b600091825260209091200154600160a060020a03161415612546576006805460001984019081106124a957fe5b60009182526020909120015460068054600160a060020a0390921691839081106124cf57fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905560068054600019840190811061250a57fe5b60009182526020909120018054600160a060020a03191690556006805490612536906000198301612660565b50600980546000190190556123f2565b60010161245b565b60068054600019810191908290811061256357fe5b60009182526020909120015460068054600160a060020a03909216918490811061258957fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905560068054829081106125c057fe5b60009182526020909120018054600160a060020a031916905560068054906125ec906000198301612660565b50506009805460001901905550565b828054828255906000526020600020908101928215612650579160200282015b828111156126505782518254600160a060020a031916600160a060020a0390911617825560209092019160019091019061261b565b5061265c9291506126a5565b5090565b8154818355818111156123f2576000838152602090206123f29181019083016126c9565b50805460008255906000526020600020908101906126a291906126c9565b50565b610e1b91905b8082111561265c578054600160a060020a03191681556001016126ab565b610e1b91905b8082111561265c57600081556001016126cf5600496e76616c69642043616e646964617465000000000000000000000000000000a165627a7a72305820ed7e9fb085d4aa846efa4fdb646452f005346180fb9067a414f44a25368e00b30029` +const XDCValidatorBin = `0x60806040526000600f5560006010553480156200001b57600080fd5b5060405162002b2238038062002b2283398101604090815281516020830151918301516060840151608085015160a086015160c087015160e08801516101008901516101208a015160088190556009879055600a869055600b859055600c849055600d839055978a018051600f55600680546001808201835560009283527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f9091018054600160a060020a031916600160a060020a038c16179055601080549091019055909a998a01999798969795969495939492939190910191905b8a518110156200032f5760078b828151811015156200011357fe5b602090810291909101810151825460018082018555600094855293839020018054600160a060020a031916600160a060020a0392831617905560408051606081018252918d168252918101929092528b51908201908c90849081106200017557fe5b90602001906020020151815250600160008d848151811015156200019557fe5b602090810291909101810151600160a060020a03908116835282820193909352604091820160009081208551815493870151600160a060020a031990941695169490941760a060020a60ff02191674010000000000000000000000000000000000000000921515929092029190911783559201516001909101558b51600291908d90849081106200022257fe5b6020908102909101810151600160a060020a03908116835282820193909352604091820160009081208054600181018255908252828220018054948e16600160a060020a0319909516851790559283526005905290208b518c90839081106200028757fe5b6020908102919091018101518254600181018455600093845291909220018054600160a060020a031916600160a060020a0390921691909117905589518a9082908110620002d157fe5b90602001906020020151600160008d84815181101515620002ee57fe5b6020908102909101810151600160a060020a0390811683528282019390935260409182016000908120938e16815260029093019052902055600101620000f8565b5060005b8251811015620003d857600e83828151811015156200034e57fe5b6020908102919091018101518254600180820185556000948552928420018054600160a060020a031916600160a060020a03909216919091179055845190916013918690859081106200039d57fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff191691151591909117905560010162000333565b505050505050505050505061272f80620003f36000396000f3006080604052600436106101ed5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630126795181146101f2578063025e7c271461020857806302aa9be21461023c57806306a49fce146102605780630999ec79146102c55780630db02622146102da5780630e3e4fb81461030157806315febd681461033c5780632a3640b1146103545780632d15cc04146103785780632f54bf6e146103995780632f9c4bba146103d5578063302b6872146103ea5780633477ee2e146104115780634110a48914610429578063441a3e701461047257806349e971be1461048d57806352b3ed16146104a257806358e7525f146104b75780635b6e3963146104d85780635b860d27146104f95780635c134d661461051a5780636132cd831461053e57806367134e7014610556578063681d8bf2146105775780636dd7d8ea1461058c57806372e44a38146105a0578063a9a981a3146105c1578063a9ff959e146105d6578063ae6e43f5146105eb578063b622f1411461060c578063b642facd1461062d578063d09f1ab41461064e578063d161c76714610663578063d51b9e9314610678578063d55b7dff14610699578063db11daef146106ae578063ef18374a146106cf578063f2ee3c7d146106e4578063f8ac9dd514610705575b600080fd5b610206600160a060020a036004351661071a565b005b34801561021457600080fd5b50610220600435610b07565b60408051600160a060020a039092168252519081900360200190f35b34801561024857600080fd5b50610206600160a060020a0360043516602435610b2f565b34801561026c57600080fd5b50610275610dbb565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102b1578181015183820152602001610299565b505050509050019250505060405180910390f35b3480156102d157600080fd5b50610206610e1e565b3480156102e657600080fd5b506102ef610f06565b60408051918252519081900360200190f35b34801561030d57600080fd5b50610328600160a060020a0360043581169060243516610f0c565b604080519115158252519081900360200190f35b34801561034857600080fd5b506102ef600435610f2c565b34801561036057600080fd5b50610220600160a060020a0360043516602435610f47565b34801561038457600080fd5b50610275600160a060020a0360043516610f7e565b3480156103a557600080fd5b506103ba600160a060020a0360043516610ff4565b60408051921515835260208301919091528051918290030190f35b3480156103e157600080fd5b50610275611059565b3480156103f657600080fd5b506102ef600160a060020a03600435811690602435166110ba565b34801561041d57600080fd5b506102206004356110e9565b34801561043557600080fd5b5061044a600160a060020a03600435166110f7565b60408051600160a060020a039094168452911515602084015282820152519081900360600190f35b34801561047e57600080fd5b50610206600435602435611126565b34801561049957600080fd5b506102ef611411565b3480156104ae57600080fd5b50610275611417565b3480156104c357600080fd5b506102ef600160a060020a0360043516611477565b3480156104e457600080fd5b50610328600160a060020a0360043516611496565b34801561050557600080fd5b506102ef600160a060020a03600435166114ab565b34801561052657600080fd5b50610220600160a060020a03600435166024356115a8565b34801561054a57600080fd5b506102206004356115c3565b34801561056257600080fd5b506102ef600160a060020a03600435166115d1565b34801561058357600080fd5b506102066115ec565b610206600160a060020a03600435166116ce565b3480156105ac57600080fd5b506102ef600160a060020a036004351661199b565b3480156105cd57600080fd5b506102ef6119ad565b3480156105e257600080fd5b506102ef6119b3565b3480156105f757600080fd5b50610206600160a060020a03600435166119b9565b34801561061857600080fd5b50610328600160a060020a0360043516611da7565b34801561063957600080fd5b50610220600160a060020a0360043516611dbc565b34801561065a57600080fd5b506102ef611dda565b34801561066f57600080fd5b506102ef611de0565b34801561068457600080fd5b50610328600160a060020a0360043516611de6565b3480156106a557600080fd5b506102ef611e0b565b3480156106ba57600080fd5b50610328600160a060020a0360043516611e11565b3480156106db57600080fd5b506102ef611e26565b3480156106f057600080fd5b50610206600160a060020a0360043516611e2c565b34801561071157600080fd5b506102ef6122d5565b600954600090341015610777576040805160e560020a62461bcd02815260206004820152601560248201527f496e76616c69642043616e646964617465204361700000000000000000000000604482015290519081900360640190fd5b600160a060020a038216600090815260126020526040902054829060ff16156107d8576040805160e560020a62461bcd02815260206004820152601160248201526000805160206126e4833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460a060020a900460ff1615610850576040805160e560020a62461bcd02815260206004820152601360248201527f416c726561647920612063616e64696461746500000000000000000000000000604482015290519081900360640190fd5b3360009081526013602052604090205460ff1615156001146108bc576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f74204772616e64204d617374657200000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038316600090815260016020819052604090912001546108e9903463ffffffff6122db16565b6007805460018181019092557fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688018054600160a060020a03808816600160a060020a03199283168117909355604080516060810182523380825260208281018881528385018a81526000988952898352858920945185549251151560a060020a0274ff00000000000000000000000000000000000000001991909816929098169190911796909616949094178255935195810195909555918352600290930190925220549092506109c0903463ffffffff6122db16565b600160a060020a038416600090815260016020818152604080842033855260020190915290912091909155600f546109fd9163ffffffff6122db16565b600f55336000908152600560205260409020541515610a635760068054600181810183556000929092527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f018054600160a060020a031916331790556010805490910190555b336000818152600560209081526040808320805460018181018355918552838520018054600160a060020a038a16600160a060020a031991821681179092558186526002855283862080549384018155865294849020909101805490941685179093558051938452908301919091523482820152517f7635f1d87b47fba9f2b09e56eb4be75cca030e0cb179c1602ac9261d39a8f5c19181900360600190a1505050565b6006805482908110610b1557fe5b600091825260209091200154600160a060020a0316905081565b600160a060020a038216600090815260016020908152604080832033845260020190915281205483908390811115610bb1576040805160e560020a62461bcd02815260206004820152600c60248201527f496e76616c696420566f74650000000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0382811660009081526001602052604090205416331415610c6357600954600160a060020a0383166000908152600160209081526040808320338452600201909152902054610c0d908363ffffffff6122f116565b1015610c63576040805160e560020a62461bcd02815260206004820181905260248201527f4d696e696d756d206361702073686f756c64206265206d61696e7461696e6564604482015290519081900360640190fd5b600160a060020a03851660009081526001602081905260409091200154610c90908563ffffffff6122f116565b600160a060020a038616600090815260016020818152604080842092830194909455338352600290910190522054610cce908563ffffffff6122f116565b600160a060020a0386166000908152600160209081526040808320338452600201909152902055600d54610d08904363ffffffff6122db16565b33600090815260208181526040808320848452909152902054909350610d34908563ffffffff6122db16565b33600081815260208181526040808320888452808352818420959095558282526001948501805495860181558352918190209093018690558051918252600160a060020a0388169282019290925280820186905290517faa0e554f781c3c3b2be110a0557f260f11af9a8aa2c64bc1e7a31dbb21e32fa29181900360600190a15050505050565b60606007805480602002602001604051908101604052809291908181526020018280548015610e1357602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610df5575b505050505090505b90565b6060600080600780549050604051908082528060200260200182016040528015610e52578160200160208202803883390190505b50925060009150600090505b600754811015610eee57600780546000919083908110610e7a57fe5b600091825260209091200154600160a060020a031614610ee6576007805482908110610ea257fe5b6000918252602090912001548351600160a060020a0390911690849084908110610ec857fe5b600160a060020a039092166020928302909101909101526001909101905b600101610e5e565b818352610f00600760208501846125fb565b50505050565b60105481565b600460209081526000928352604080842090915290825290205460ff1681565b33600090815260208181526040808320938352929052205490565b600560205281600052604060002081815481101515610f6257fe5b600091825260209091200154600160a060020a03169150829050565b600160a060020a038116600090815260026020908152604091829020805483518184028101840190945280845260609392830182828015610fe857602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610fca575b50505050509050919050565b600080805b60065481101561104b5783600160a060020a031660068281548110151561101c57fe5b600091825260209091200154600160a060020a031614156110435760018192509250611053565b600101610ff9565b600092508291505b50915091565b3360009081526020818152604091829020600101805483518184028101840190945280845260609392830182828015610e1357602002820191906000526020600020905b81548152602001906001019080831161109d575050505050905090565b600160a060020a0391821660009081526001602090815260408083209390941682526002909201909152205490565b6007805482908110610b1557fe5b60016020819052600091825260409091208054910154600160a060020a0382169160a060020a900460ff169083565b336000908152601160205260408120548390839060ff1615611192576040805160e560020a62461bcd02815260206004820152600d60248201527f496e76616c6964204f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600082116111ea576040805160e560020a62461bcd02815260206004820152601460248201527f496e76616c696420626c6f636b206e756d626572000000000000000000000000604482015290519081900360640190fd5b43821115611268576040805160e560020a62461bcd02815260206004820152603560248201527f426c6f636b206e756d6265722073686f756c64206265206c657373207468616e60448201527f2063757272656e7420626c6f636b206e756d6265720000000000000000000000606482015290519081900360840190fd5b33600090815260208181526040808320858452909152812054116112d6576040805160e560020a62461bcd02815260206004820152601260248201527f4e6f2063617020746f2077697468647261770000000000000000000000000000604482015290519081900360640190fd5b3360009081526020819052604090206001018054839190839081106112f757fe5b9060005260206000200154141515611359576040805160e560020a62461bcd02815260206004820152600d60248201527f496e76616c696420696e64657800000000000000000000000000000000000000604482015290519081900360640190fd5b336000818152602081815260408083208984528083529083208054908490559383529190526001018054919450908590811061139157fe5b60009182526020822001819055604051339185156108fc02918691818181858888f193505050501580156113c9573d6000803e3d6000fd5b50604080513381526020810187905280820185905290517ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360600190a15050505050565b60085481565b6060600e805480602002602001604051908101604052809291908181526020018280548015610e1357602002820191906000526020600020908154600160a060020a03168152600190910190602001808311610df5575050505050905090565b600160a060020a03166000908152600160208190526040909120015490565b60136020526000908152604090205460ff1681565b600160a060020a038116600090815260126020526040812054829060ff161561150c576040805160e560020a62461bcd02815260206004820152601160248201526000805160206126e4833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460a060020a900460ff161515611573576040805160e560020a62461bcd02815260206004820152601160248201526000805160206126e4833981519152604482015290519081900360640190fd5b61157b611e26565b600160a060020a0384166000908152600360205260409020546064028115156115a057fe5b049392505050565b600260205281600052604060002081815481101515610f6257fe5b600e805482908110610b1557fe5b600160a060020a031660009081526005602052604090205490565b6060600080600680549050604051908082528060200260200182016040528015611620578160200160208202803883390190505b50925060009150600090505b6006548110156116bc5760068054600091908390811061164857fe5b600091825260209091200154600160a060020a0316146116b457600680548290811061167057fe5b6000918252602090912001548351600160a060020a039091169084908490811061169657fe5b600160a060020a039092166020928302909101909101526001909101905b60010161162c565b818352610f00600660208501846125fb565b600a54341015611728576040805160e560020a62461bcd02815260206004820152601160248201527f496e76616c696420566f74657220436170000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038116600090815260126020526040902054819060ff1615611789576040805160e560020a62461bcd02815260206004820152601160248201526000805160206126e4833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460a060020a900460ff1615156117f0576040805160e560020a62461bcd02815260206004820152601160248201526000805160206126e4833981519152604482015290519081900360640190fd5b3360009081526013602052604090205460ff16151560011461185c576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f74204772616e64204d617374657200000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03821660009081526001602081905260409091200154611889903463ffffffff6122db16565b600160a060020a03831660009081526001602081815260408084209283019490945533835260029091019052205415156118f657600160a060020a0382166000908152600260209081526040822080546001810182559083529120018054600160a060020a031916331790555b600160a060020a038216600090815260016020908152604080832033845260020190915290205461192d903463ffffffff6122db16565b600160a060020a0383166000818152600160209081526040808320338085526002909101835292819020949094558351918252810191909152348183015290517f66a9138482c99e9baf08860110ef332cc0c23b4a199a53593d8db0fc8f96fbfc9181900360600190a15050565b60036020526000908152604090205481565b600f5481565b600d5481565b600160a060020a03808216600090815260016020526040812054909182918291829182918791163314611a5c576040805160e560020a62461bcd02815260206004820152602160248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f60448201527f6e00000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a038716600090815260016020526040902054879060a060020a900460ff161515611afd576040805160e560020a62461bcd02815260206004820152602560248201527f4f6e6c792063616e6469646174652063616e2063616c6c20746869732066756e60448201527f6374696f6e000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0388166000908152600160208190526040909120805474ff000000000000000000000000000000000000000019169055600f54611b469163ffffffff6122f116565b600f55611b5288612303565b611b5a6123f7565b3360009081526005602052604081208054909850965094505b85851015611c5e5787600160a060020a03168786815481101515611b9357fe5b600091825260209091200154600160a060020a03161415611c53578660018703815481101515611bbf57fe5b6000918252602090912001548754600160a060020a0390911690889087908110611be557fe5b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a031602179055508660018703815481101515611c2457fe5b60009182526020909120018054600160a060020a03191690558654611c4d886000198301612660565b50611c5e565b600190940193611b73565b86541515611c6f57611c6f33612455565b600160a060020a038816600081815260016020818152604080842033855260028101835290842054949093528190520154909450611cb3908563ffffffff6122f116565b600160a060020a0389166000908152600160208181526040808420928301949094553383526002909101905290812055600c54611cf6904363ffffffff6122db16565b33600090815260208181526040808320848452909152902054909350611d22908563ffffffff6122db16565b33600081815260208181526040808320888452808352818420959095558282526001948501805495860181558352918190209093018690558051918252600160a060020a038b169282019290925281517f4edf3e325d0063213a39f9085522994a1c44bea5f39e7d63ef61260a1e58c6d3929181900390910190a15050505050505050565b60126020526000908152604090205460ff1681565b600160a060020a039081166000908152600160205260409020541690565b600b5481565b600c5481565b600160a060020a031660009081526001602052604090205460a060020a900460ff1690565b60095481565b60116020526000908152604090205460ff1681565b60105490565b33600081815260126020526040812054909182918291829182916060918291849182919060ff1615611e96576040805160e560020a62461bcd02815260206004820152601160248201526000805160206126e4833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460a060020a900460ff161515611efd576040805160e560020a62461bcd02815260206004820152601160248201526000805160206126e4833981519152604482015290519081900360640190fd5b611f0633611dbc565b9950600460008b600160a060020a0316600160a060020a0316815260200190815260200160002060008c600160a060020a0316600160a060020a0316815260200190815260200160002060009054906101000a900460ff16151515611fb5576040805160e560020a62461bcd02815260206004820152600d60248201527f416c726561647920766f74656400000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03808b166000908152600460209081526040808320938f168352928152828220805460ff19166001908117909155600390915291902080549091019055604b612003611e26565b600160a060020a038d1660009081526003602052604090205460640281151561202857fe5b04106122c857600160a060020a038b166000908152601160205260409020805460ff1916600117905561205a8b610ff4565b9850985088156122c85760075460408051828152602080840282010190915260009850889750908015612097578160200160208202803883390190505b5060075460408051828152602080840282010190915291965080156120c6578160200160208202803883390190505b509350600092505b60075483101561220d5760078054849081106120e657fe5b600091825260209091200154600160a060020a0390811692508b1661210a83611dbc565b600160a060020a031614156121d657600f5461212d90600163ffffffff6122f116565b600f55845160018701968391879190811061214457fe5b600160a060020a0392831660209182029092018101919091528382166000908152601282526040808220805460ff19166001908117909155808452818320805474ffffffffffffffffffffffffffffffffffffffffff1916815501829055928e16815260059091529081206121b891612684565b600160a060020a038b16600090815260036020526040812055612202565b83516001880197839186919081106121ea57fe5b600160a060020a039092166020928302909101909101525b6001909201916120ce565b86845285855283516122269060079060208701906125fb565b5061222f6123f7565b6122388861254e565b7fe18d61a5bf4aa2ab40afc88aa9039d27ae17ff4ec1c65f5f414df6f02ce8b35e8b866040518083600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156122b357818101518382015260200161229b565b50505050905001935050505060405180910390a15b5050505050505050505050565b600a5481565b6000828201838110156122ea57fe5b9392505050565b6000828211156122fd57fe5b50900390565b60075460005b818110156123f25782600160a060020a031660078281548110151561232a57fe5b600091825260209091200154600160a060020a031614156123ea5760078054600019840190811061235757fe5b60009182526020909120015460078054600160a060020a03909216918390811061237d57fe5b60009182526020909120018054600160a060020a031916600160a060020a03929092169190911790556007805460001984019081106123b857fe5b60009182526020909120018054600160a060020a031916905560078054906123e4906000198301612660565b506123f2565b600101612309565b505050565b6008546007541015612453576040805160e560020a62461bcd02815260206004820152601360248201527f4c6f772043616e64696461746520436f756e7400000000000000000000000000604482015290519081900360640190fd5b565b60065460005b818110156123f25782600160a060020a031660068281548110151561247c57fe5b600091825260209091200154600160a060020a03161415612546576006805460001984019081106124a957fe5b60009182526020909120015460068054600160a060020a0390921691839081106124cf57fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905560068054600019840190811061250a57fe5b60009182526020909120018054600160a060020a03191690556006805490612536906000198301612660565b50601080546000190190556123f2565b60010161245b565b60068054600019810191908290811061256357fe5b60009182526020909120015460068054600160a060020a03909216918490811061258957fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905560068054829081106125c057fe5b60009182526020909120018054600160a060020a031916905560068054906125ec906000198301612660565b50506010805460001901905550565b828054828255906000526020600020908101928215612650579160200282015b828111156126505782518254600160a060020a031916600160a060020a0390911617825560209092019160019091019061261b565b5061265c9291506126a5565b5090565b8154818355818111156123f2576000838152602090206123f29181019083016126c9565b50805460008255906000526020600020908101906126a291906126c9565b50565b610e1b91905b8082111561265c578054600160a060020a03191681556001016126ab565b610e1b91905b8082111561265c57600081556001016126cf5600496e76616c69642043616e646964617465000000000000000000000000000000a165627a7a72305820306ba6c6e50f0e3031830b743f5331b34c6e3783d3f58fb64a0b9cf278cf0c350029` // DeployXDCValidator deploys a new Ethereum contract, binding an instance of XDCValidator to it. func DeployXDCValidator(auth *bind.TransactOpts, backend bind.ContractBackend, _candidates []common.Address, _caps []*big.Int, _firstOwner common.Address, _minCandidateCap *big.Int, _minVoterCap *big.Int, _maxValidatorNumber *big.Int, _candidateWithdrawDelay *big.Int, _voterWithdrawDelay *big.Int, _grandMasters []common.Address, _minCandidateNum *big.Int) (common.Address, *types.Transaction, *XDCValidator, error) { diff --git a/contracts/validator/src/contracts/XDCValidator.sol b/contracts/validator/src/contracts/XDCValidator.sol index e8684cc52..6c1bf1ece 100644 --- a/contracts/validator/src/contracts/XDCValidator.sol +++ b/contracts/validator/src/contracts/XDCValidator.sol @@ -39,21 +39,22 @@ contract XDCValidator { address[] public candidates; - uint256 public candidateCount = 0; - uint256 public ownerCount = 0; uint256 public minCandidateNum; uint256 public minCandidateCap; uint256 public minVoterCap; uint256 public maxValidatorNumber; uint256 public candidateWithdrawDelay; uint256 public voterWithdrawDelay; + + address[] public grandMasters; + + uint256 public candidateCount = 0; + uint256 public ownerCount = 0; // owner => invalid mapping(address => bool) public invalidOwner; // candaite => invalid mapping(address => bool) public invalidCandidate; - address[] public grandMasters; - mapping(address => bool) public grandMasterMap; modifier onlyValidCandidateCap() { diff --git a/contracts/validator/validator_test.go b/contracts/validator/validator_test.go index 97ded2d15..4b5daa8a2 100644 --- a/contracts/validator/validator_test.go +++ b/contracts/validator/validator_test.go @@ -330,6 +330,7 @@ func TestStatedbUtils(t *testing.T) { t.Fatalf("can't get candidates: %v", err) } candidates_statedb := state.GetCandidates(statedb) + if !reflect.DeepEqual(candidates, candidates_statedb) { t.Fatalf("candidates not equal, statedb utils is wrong,\nbind calling result\n%v\nstatedb result\n%v", candidates, candidates_statedb) } @@ -389,6 +390,7 @@ func TestStatedbUtils(t *testing.T) { if len(grandMasters) != 2 { t.Fatalf("get grand master wrong result") } + if !reflect.DeepEqual(grandMasters, grandMasters_statedb) { t.Fatalf("voters not equal, statedb utils is wrong,\nbind calling result\n%v\nstatedb result\n%v", voters, voters_statedb) } diff --git a/core/state/statedb_utils.go b/core/state/statedb_utils.go index 718e54ddf..23b534bca 100644 --- a/core/state/statedb_utils.go +++ b/core/state/statedb_utils.go @@ -73,19 +73,18 @@ var ( "withdrawsState": 0, "validatorsState": 1, "voters": 2, - "KYCString": 3, - "invalidKYCCount": 4, - "hasVotedInvalid": 5, - "ownerToCandidate": 6, - "owners": 7, - "candidates": 8, - "minCandidateNum": 9, - "minCandidateCap": 10, - "minVoterCap": 11, - "maxValidatorNumber": 12, - "candidateWithdrawDelay": 13, - "voterWithdrawDelay": 14, - "grandMasters": 15, + "invalidKYCCount": 3, + "hasVotedInvalid": 4, + "ownerToCandidate": 5, + "owners": 6, + "candidates": 7, + "minCandidateNum": 8, + "minCandidateCap": 9, + "minVoterCap": 10, + "maxValidatorNumber": 11, + "candidateWithdrawDelay": 12, + "voterWithdrawDelay": 13, + "grandMasters": 14, } ) From 9361fffc7210cc6ea91b17fd5107b4d33565c15e Mon Sep 17 00:00:00 2001 From: Galaxy <30950645+GalaxySciTech@users.noreply.github.com> Date: Wed, 7 Aug 2024 11:15:48 +0400 Subject: [PATCH 09/12] update --- consensus/tests/engine_v2_tests/helper.go | 2 +- consensus/tests/engine_v2_tests/mine_test.go | 4 ++-- consensus/tests/engine_v2_tests/verify_header_test.go | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/consensus/tests/engine_v2_tests/helper.go b/consensus/tests/engine_v2_tests/helper.go index 06f2038a0..3234ea9c5 100644 --- a/consensus/tests/engine_v2_tests/helper.go +++ b/consensus/tests/engine_v2_tests/helper.go @@ -614,7 +614,7 @@ func PrepareQCandProcess(t *testing.T, blockchain *BlockChain, currentBlock *typ func CreateBlock(blockchain *BlockChain, chainConfig *params.ChainConfig, startingBlock *types.Block, blockNumber int, roundNumber int64, blockCoinBase string, signer common.Address, signFn func(account accounts.Account, hash []byte) ([]byte, error), penalties []common.Address, signersKey []*ecdsa.PrivateKey, merkleRoot string) *types.Block { currentBlock := startingBlock if len(merkleRoot) == 0 { - merkleRoot = "711be05c0b9d89bd511dd4c20ade1820b2c1fb13343ee0cedd3869150eb2d377" + merkleRoot = "c778a53427689109ddaedda8c5271caaf622da65dfbb1b38b47561d4b0c94ac3" } var header *types.Header statedb, err := blockchain.State() diff --git a/consensus/tests/engine_v2_tests/mine_test.go b/consensus/tests/engine_v2_tests/mine_test.go index 1f70bf4ed..96775fa0a 100644 --- a/consensus/tests/engine_v2_tests/mine_test.go +++ b/consensus/tests/engine_v2_tests/mine_test.go @@ -28,7 +28,7 @@ func TestYourTurnInitialV2(t *testing.T) { t.Logf("Inserting block with propose at 11...") blockCoinbaseA := "0xaaa0000000000000000000000000000000000011" //Get from block validator error message - merkleRoot := "711be05c0b9d89bd511dd4c20ade1820b2c1fb13343ee0cedd3869150eb2d377" + merkleRoot := "c778a53427689109ddaedda8c5271caaf622da65dfbb1b38b47561d4b0c94ac3" extraInBytes := generateV2Extra(11, parentBlock, signer, signFn, nil) header := &types.Header{ @@ -79,7 +79,7 @@ func TestShouldMineOncePerRound(t *testing.T) { _, err := adaptor.Seal(blockchain, block910, nil) assert.Nil(t, err) time.Sleep(time.Duration(minePeriod) * time.Second) - merkleRoot := "711be05c0b9d89bd511dd4c20ade1820b2c1fb13343ee0cedd3869150eb2d377" + merkleRoot := "c778a53427689109ddaedda8c5271caaf622da65dfbb1b38b47561d4b0c94ac3" header := &types.Header{ Root: common.HexToHash(merkleRoot), diff --git a/consensus/tests/engine_v2_tests/verify_header_test.go b/consensus/tests/engine_v2_tests/verify_header_test.go index 145f641ae..c09145f52 100644 --- a/consensus/tests/engine_v2_tests/verify_header_test.go +++ b/consensus/tests/engine_v2_tests/verify_header_test.go @@ -78,7 +78,7 @@ func TestShouldVerifyBlock(t *testing.T) { err = adaptor.VerifyHeader(blockchain, invalidPenaltiesExistBlock, true) assert.Equal(t, utils.ErrInvalidFieldInNonGapPlusOneSwitch, err) - merkleRoot := "711be05c0b9d89bd511dd4c20ade1820b2c1fb13343ee0cedd3869150eb2d377" + merkleRoot := "c778a53427689109ddaedda8c5271caaf622da65dfbb1b38b47561d4b0c94ac3" parentNotExistBlock := blockchain.GetBlockByNumber(901).Header() parentNotExistBlock.ParentHash = common.HexToHash(merkleRoot) err = adaptor.VerifyHeader(blockchain, parentNotExistBlock, true) From 744dab76e075858651a891e21f323e1b4d722688 Mon Sep 17 00:00:00 2001 From: Galaxy <30950645+GalaxySciTech@users.noreply.github.com> Date: Wed, 7 Aug 2024 11:25:40 +0400 Subject: [PATCH 10/12] update --- consensus/tests/engine_v2_tests/api_test.go | 2 +- consensus/tests/engine_v2_tests/helper.go | 2 +- consensus/tests/engine_v2_tests/mine_test.go | 4 ++-- consensus/tests/engine_v2_tests/penalty_test.go | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/consensus/tests/engine_v2_tests/api_test.go b/consensus/tests/engine_v2_tests/api_test.go index cab0ee131..0ae00856c 100644 --- a/consensus/tests/engine_v2_tests/api_test.go +++ b/consensus/tests/engine_v2_tests/api_test.go @@ -66,7 +66,7 @@ func TestGetMissedRoundsInEpochByBlockNum(t *testing.T) { startingBlockNum := currentBlock.Number().Int64() + 1 // Skipped the round roundNumber := startingBlockNum + 2 - block := CreateBlock(blockchain, chainConfig, currentBlock, int(startingBlockNum), roundNumber, blockCoinBase, signer, signFn, nil, nil, "c2bf7b59be5184fc1148be5db14692b2dc89a1b345895d3e8d0ee7b8a7607450") + block := CreateBlock(blockchain, chainConfig, currentBlock, int(startingBlockNum), roundNumber, blockCoinBase, signer, signFn, nil, nil, "25cb20ed8e7f21934d832318bc912e99e8745b4b3018e65d30bafc565df19c3a") err := blockchain.InsertBlock(block) if err != nil { t.Fatal(err) diff --git a/consensus/tests/engine_v2_tests/helper.go b/consensus/tests/engine_v2_tests/helper.go index 3234ea9c5..b67730056 100644 --- a/consensus/tests/engine_v2_tests/helper.go +++ b/consensus/tests/engine_v2_tests/helper.go @@ -559,7 +559,7 @@ func PrepareXDCTestBlockChainWith128Candidates(t *testing.T, numOfBlocks int, ch blockCoinBase = signer.Hex() } roundNumber := int64(i) - chainConfig.XDPoS.V2.SwitchBlock.Int64() - block := CreateBlock(blockchain, chainConfig, currentBlock, i, roundNumber, blockCoinBase, signer, signFn, nil, nil, "c2bf7b59be5184fc1148be5db14692b2dc89a1b345895d3e8d0ee7b8a7607450") + block := CreateBlock(blockchain, chainConfig, currentBlock, i, roundNumber, blockCoinBase, signer, signFn, nil, nil, "25cb20ed8e7f21934d832318bc912e99e8745b4b3018e65d30bafc565df19c3a") err = blockchain.InsertBlock(block) if err != nil { t.Fatal(err) diff --git a/consensus/tests/engine_v2_tests/mine_test.go b/consensus/tests/engine_v2_tests/mine_test.go index 96775fa0a..70bc0f464 100644 --- a/consensus/tests/engine_v2_tests/mine_test.go +++ b/consensus/tests/engine_v2_tests/mine_test.go @@ -128,7 +128,7 @@ func TestUpdateMasterNodes(t *testing.T) { t.Fatal(err) } //Get from block validator error message - merkleRoot := "2f34d88e4afb95a51b5dd3b157bdec944790c033bbf6e990cc7f946ad07d47c4" + merkleRoot := "41ad5ea0d4c46f36548b27a946fe51e3cefd4d8567cb5c3398ebb570f99d9ee3" header := &types.Header{ Root: common.HexToHash(merkleRoot), Number: big.NewInt(int64(1350)), @@ -270,7 +270,7 @@ func TestUpdateMultipleMasterNodes(t *testing.T) { t.Logf("Inserting block with propose at 1350...") blockCoinbaseA := "0xaaa0000000000000000000000000000000001350" //Get from block validator error message - merkleRoot := "c2bf7b59be5184fc1148be5db14692b2dc89a1b345895d3e8d0ee7b8a7607450" + merkleRoot := "25cb20ed8e7f21934d832318bc912e99e8745b4b3018e65d30bafc565df19c3a" parentBlock := CreateBlock(blockchain, config, currentBlock, 1350, 450, blockCoinbaseA, signer, signFn, nil, nil, merkleRoot) err := blockchain.InsertBlock(parentBlock) assert.Nil(t, err) diff --git a/consensus/tests/engine_v2_tests/penalty_test.go b/consensus/tests/engine_v2_tests/penalty_test.go index fb7e500e4..5f44416b2 100644 --- a/consensus/tests/engine_v2_tests/penalty_test.go +++ b/consensus/tests/engine_v2_tests/penalty_test.go @@ -38,7 +38,7 @@ func TestHookPenaltyV2TwoEpoch(t *testing.T) { header1335 := blockchain.GetHeaderByNumber(config.XDPoS.Epoch + config.XDPoS.Gap - uint64(common.MergeSignRange)) tx, err := signingTxWithKey(header1335, 0, voterKey) assert.Nil(t, err) - block1349 := CreateBlock(blockchain, conf, block1348, 1349, 1358, signer.Hex(), signer, signFn, nil, nil, "c2bf7b59be5184fc1148be5db14692b2dc89a1b345895d3e8d0ee7b8a7607450") + block1349 := CreateBlock(blockchain, conf, block1348, 1349, 1358, signer.Hex(), signer, signFn, nil, nil, "25cb20ed8e7f21934d832318bc912e99e8745b4b3018e65d30bafc565df19c3a") err = blockchain.InsertBlock(block1349) assert.Nil(t, err) adaptor.CacheSigningTxs(block1349.Hash(), []*types.Transaction{tx}) From b2d142bc0f297e9d8c7844fcc10bf64d702640ed Mon Sep 17 00:00:00 2001 From: Galaxy <30950645+GalaxySciTech@users.noreply.github.com> Date: Wed, 7 Aug 2024 19:21:29 +0400 Subject: [PATCH 11/12] Update XDCValidator.sol --- contracts/validator/src/contracts/XDCValidator.sol | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/contracts/validator/src/contracts/XDCValidator.sol b/contracts/validator/src/contracts/XDCValidator.sol index 6c1bf1ece..0e2cbdcc7 100644 --- a/contracts/validator/src/contracts/XDCValidator.sol +++ b/contracts/validator/src/contracts/XDCValidator.sol @@ -346,7 +346,7 @@ contract XDCValidator { if (isOwnerNow) { uint j = 0; uint count = 0; - address[] memory allMasternodes = new address[]( + address[] memory allInvalidMasternodes = new address[]( candidates.length ); address[] memory newCandidates = new address[]( @@ -358,7 +358,7 @@ contract XDCValidator { if (getCandidateOwner(candidate) == _owner) { // logic to remove cap. candidateCount = candidateCount.sub(1); - allMasternodes[count++] = candidate; + allInvalidMasternodes[count++] = candidate; invalidCandidate[candidate] = true; delete validatorsState[candidate]; delete ownerToCandidate[_owner]; @@ -371,14 +371,14 @@ contract XDCValidator { // Resize the array. assembly { mstore(newCandidates, j) - mstore(allMasternodes, count) + mstore(allInvalidMasternodes, count) } candidates = newCandidates; checkMinCandidateNum(); removeOwnerByIndex(ownerIndex); - emit InvalidatedNode(_owner, allMasternodes); + emit InvalidatedNode(_owner, allInvalidMasternodes); } } } From d0643847c2ad0c7ceeae605beb71ce3083f1426b Mon Sep 17 00:00:00 2001 From: Galaxy <30950645+GalaxySciTech@users.noreply.github.com> Date: Mon, 12 Aug 2024 18:05:11 +0400 Subject: [PATCH 12/12] Update xdcValidator.js --- contracts/validator/src/test/xdcValidator.js | 1 + 1 file changed, 1 insertion(+) diff --git a/contracts/validator/src/test/xdcValidator.js b/contracts/validator/src/test/xdcValidator.js index 7575fa245..5a0f3b3a3 100644 --- a/contracts/validator/src/test/xdcValidator.js +++ b/contracts/validator/src/test/xdcValidator.js @@ -112,6 +112,7 @@ describe("XDCValidator", () => { expect(candidatesBefore).to.deep.eq(before); expect(candidates).to.deep.eq(deploy["candidates"]); expect(voters).to.include(master); + expect(ownerToCandidates).to.not.include(candidate); expect(validatorsState["owner"]).to.eq(master); expect(validatorsState["isCandidate"]).to.eq(false); expect(validatorsState["cap"]).to.eq(0);