[
  {
    "anonymous":false,
    "inputs":[
      {
        "indexed":false,
        "internalType":"address",
        "name":"validator",
        "type":"address"
      },
      {
        "indexed":false,
        "internalType":"string",
        "name":"nodeID",
        "type":"string"
      }
    ],
    "name":"AddValidator",
    "type":"event"
  },
  {
    "anonymous":false,
    "inputs":[
      {
        "indexed":true,
        "internalType":"address",
        "name":"validator",
        "type":"address"
      },
      {
        "indexed":false,
        "internalType":"uint256",
        "name":"amount",
        "type":"uint256"
      }
    ],
    "name":"Disbursement",
    "type":"event"
  },
  {
    "anonymous":false,
    "inputs":[
      {
        "indexed":false,
        "internalType":"uint256",
        "name":"amount",
        "type":"uint256"
      }
    ],
    "name":"Process",
    "type":"event"
  },
  {
    "anonymous":false,
    "inputs":[
      {
        "indexed":false,
        "internalType":"address",
        "name":"validator",
        "type":"address"
      },
      {
        "indexed":false,
        "internalType":"string",
        "name":"nodeID",
        "type":"string"
      }
    ],
    "name":"RemoveValidator",
    "type":"event"
  },
  {
    "anonymous":false,
    "inputs":[
      {
        "indexed":true,
        "internalType":"bytes32",
        "name":"role",
        "type":"bytes32"
      },
      {
        "indexed":true,
        "internalType":"bytes32",
        "name":"previousAdminRole",
        "type":"bytes32"
      },
      {
        "indexed":true,
        "internalType":"bytes32",
        "name":"newAdminRole",
        "type":"bytes32"
      }
    ],
    "name":"RoleAdminChanged",
    "type":"event"
  },
  {
    "anonymous":false,
    "inputs":[
      {
        "indexed":true,
        "internalType":"bytes32",
        "name":"role",
        "type":"bytes32"
      },
      {
        "indexed":true,
        "internalType":"address",
        "name":"account",
        "type":"address"
      },
      {
        "indexed":true,
        "internalType":"address",
        "name":"sender",
        "type":"address"
      }
    ],
    "name":"RoleGranted",
    "type":"event"
  },
  {
    "anonymous":false,
    "inputs":[
      {
        "indexed":true,
        "internalType":"bytes32",
        "name":"role",
        "type":"bytes32"
      },
      {
        "indexed":true,
        "internalType":"address",
        "name":"account",
        "type":"address"
      },
      {
        "indexed":true,
        "internalType":"address",
        "name":"sender",
        "type":"address"
      }
    ],
    "name":"RoleRevoked",
    "type":"event"
  },
  {
    "anonymous":false,
    "inputs":[
      {
        "indexed":true,
        "internalType":"address",
        "name":"validator",
        "type":"address"
      },
      {
        "indexed":false,
        "internalType":"uint256",
        "name":"amount",
        "type":"uint256"
      }
    ],
    "name":"Slash",
    "type":"event"
  },
  {
    "anonymous":false,
    "inputs":[
      {
        "indexed":true,
        "internalType":"address",
        "name":"validator",
        "type":"address"
      },
      {
        "indexed":false,
        "internalType":"uint256",
        "name":"amount",
        "type":"uint256"
      },
      {
        "indexed":false,
        "internalType":"uint256",
        "name":"endTime",
        "type":"uint256"
      }
    ],
    "name":"Stake",
    "type":"event"
  },
  {
    "anonymous":false,
    "inputs":[
      {
        "indexed":true,
        "internalType":"address",
        "name":"validator",
        "type":"address"
      },
      {
        "indexed":false,
        "internalType":"uint256",
        "name":"amount",
        "type":"uint256"
      }
    ],
    "name":"Unstake",
    "type":"event"
  },
  {
    "inputs":[

    ],
    "name":"DEFAULT_ADMIN_ROLE",
    "outputs":[
      {
        "internalType":"bytes32",
        "name":"",
        "type":"bytes32"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[

    ],
    "name":"INITIAL_MAX_STAKE_AMOUNT",
    "outputs":[
      {
        "internalType":"uint256",
        "name":"",
        "type":"uint256"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[

    ],
    "name":"INITIAL_MAX_STAKE_DURATION",
    "outputs":[
      {
        "internalType":"uint256",
        "name":"",
        "type":"uint256"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[

    ],
    "name":"INITIAL_MIN_STAKE_AMOUNT",
    "outputs":[
      {
        "internalType":"uint256",
        "name":"",
        "type":"uint256"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[

    ],
    "name":"INITIAL_MIN_STAKE_DURATION",
    "outputs":[
      {
        "internalType":"uint256",
        "name":"",
        "type":"uint256"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[

    ],
    "name":"MODERATOR_ROLE",
    "outputs":[
      {
        "internalType":"bytes32",
        "name":"",
        "type":"bytes32"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[
      {
        "internalType":"address",
        "name":"_address",
        "type":"address"
      },
      {
        "internalType":"string",
        "name":"_nodeID",
        "type":"string"
      }
    ],
    "name":"addValidator",
    "outputs":[

    ],
    "stateMutability":"nonpayable",
    "type":"function"
  },
  {
    "inputs":[
      {
        "internalType":"address",
        "name":"",
        "type":"address"
      }
    ],
    "name":"addressToValidator",
    "outputs":[
      {
        "internalType":"address",
        "name":"owner",
        "type":"address"
      },
      {
        "internalType":"string",
        "name":"nodeID",
        "type":"string"
      },
      {
        "internalType":"address",
        "name":"rewardAddress",
        "type":"address"
      },
      {
        "internalType":"uint256",
        "name":"stakeAmount",
        "type":"uint256"
      },
      {
        "internalType":"uint256",
        "name":"stakeStartAt",
        "type":"uint256"
      },
      {
        "internalType":"uint256",
        "name":"stakeEndAt",
        "type":"uint256"
      },
      {
        "internalType":"uint256",
        "name":"balance",
        "type":"uint256"
      },
      {
        "internalType":"uint256",
        "name":"lifetimeBalance",
        "type":"uint256"
      },
      {
        "internalType":"bool",
        "name":"exists",
        "type":"bool"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[

    ],
    "name":"allocatedAmount",
    "outputs":[
      {
        "internalType":"uint256",
        "name":"",
        "type":"uint256"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[

    ],
    "name":"burnPercentage",
    "outputs":[
      {
        "internalType":"uint256",
        "name":"",
        "type":"uint256"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[

    ],
    "name":"claimBalance",
    "outputs":[

    ],
    "stateMutability":"nonpayable",
    "type":"function"
  },
  {
    "inputs":[

    ],
    "name":"fundAddress",
    "outputs":[
      {
        "internalType":"address payable",
        "name":"",
        "type":"address"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[

    ],
    "name":"fundPercentage",
    "outputs":[
      {
        "internalType":"uint256",
        "name":"",
        "type":"uint256"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[
      {
        "internalType":"bytes32",
        "name":"role",
        "type":"bytes32"
      }
    ],
    "name":"getRoleAdmin",
    "outputs":[
      {
        "internalType":"bytes32",
        "name":"",
        "type":"bytes32"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[
      {
        "internalType":"address",
        "name":"_validator",
        "type":"address"
      }
    ],
    "name":"getValidator",
    "outputs":[
      {
        "components":[
          {
            "internalType":"address",
            "name":"owner",
            "type":"address"
          },
          {
            "internalType":"string",
            "name":"nodeID",
            "type":"string"
          },
          {
            "internalType":"address",
            "name":"rewardAddress",
            "type":"address"
          },
          {
            "internalType":"uint256",
            "name":"stakeAmount",
            "type":"uint256"
          },
          {
            "internalType":"uint256",
            "name":"stakeStartAt",
            "type":"uint256"
          },
          {
            "internalType":"uint256",
            "name":"stakeEndAt",
            "type":"uint256"
          },
          {
            "internalType":"uint256",
            "name":"balance",
            "type":"uint256"
          },
          {
            "internalType":"uint256",
            "name":"lifetimeBalance",
            "type":"uint256"
          },
          {
            "internalType":"bool",
            "name":"exists",
            "type":"bool"
          }
        ],
        "internalType":"struct ValidatorFund.Validator",
        "name":"",
        "type":"tuple"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[

    ],
    "name":"getValidators",
    "outputs":[
      {
        "components":[
          {
            "internalType":"address",
            "name":"owner",
            "type":"address"
          },
          {
            "internalType":"string",
            "name":"nodeID",
            "type":"string"
          },
          {
            "internalType":"address",
            "name":"rewardAddress",
            "type":"address"
          },
          {
            "internalType":"uint256",
            "name":"stakeAmount",
            "type":"uint256"
          },
          {
            "internalType":"uint256",
            "name":"stakeStartAt",
            "type":"uint256"
          },
          {
            "internalType":"uint256",
            "name":"stakeEndAt",
            "type":"uint256"
          },
          {
            "internalType":"uint256",
            "name":"balance",
            "type":"uint256"
          },
          {
            "internalType":"uint256",
            "name":"lifetimeBalance",
            "type":"uint256"
          },
          {
            "internalType":"bool",
            "name":"exists",
            "type":"bool"
          }
        ],
        "internalType":"struct ValidatorFund.Validator[]",
        "name":"",
        "type":"tuple[]"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[

    ],
    "name":"govToken",
    "outputs":[
      {
        "internalType":"contract IERC20",
        "name":"",
        "type":"address"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[
      {
        "internalType":"bytes32",
        "name":"role",
        "type":"bytes32"
      },
      {
        "internalType":"address",
        "name":"account",
        "type":"address"
      }
    ],
    "name":"grantRole",
    "outputs":[

    ],
    "stateMutability":"nonpayable",
    "type":"function"
  },
  {
    "inputs":[
      {
        "internalType":"bytes32",
        "name":"role",
        "type":"bytes32"
      },
      {
        "internalType":"address",
        "name":"account",
        "type":"address"
      }
    ],
    "name":"hasRole",
    "outputs":[
      {
        "internalType":"bool",
        "name":"",
        "type":"bool"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[
      {
        "internalType":"uint256",
        "name":"_burnPercentage",
        "type":"uint256"
      },
      {
        "internalType":"uint256",
        "name":"_jewelFundPercentage",
        "type":"uint256"
      },
      {
        "internalType":"uint256",
        "name":"_validatorFundPercentage",
        "type":"uint256"
      },
      {
        "internalType":"address",
        "name":"_govTokenAddress",
        "type":"address"
      },
      {
        "internalType":"address",
        "name":"_fundAddress",
        "type":"address"
      }
    ],
    "name":"initialize",
    "outputs":[

    ],
    "stateMutability":"nonpayable",
    "type":"function"
  },
  {
    "inputs":[

    ],
    "name":"lastDistribution",
    "outputs":[
      {
        "internalType":"uint256",
        "name":"",
        "type":"uint256"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[

    ],
    "name":"maxStakeAmount",
    "outputs":[
      {
        "internalType":"uint256",
        "name":"",
        "type":"uint256"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[

    ],
    "name":"maxStakeDuration",
    "outputs":[
      {
        "internalType":"uint256",
        "name":"",
        "type":"uint256"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[

    ],
    "name":"minStakeAmount",
    "outputs":[
      {
        "internalType":"uint256",
        "name":"",
        "type":"uint256"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[

    ],
    "name":"minStakeDuration",
    "outputs":[
      {
        "internalType":"uint256",
        "name":"",
        "type":"uint256"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[

    ],
    "name":"processFunds",
    "outputs":[

    ],
    "stateMutability":"nonpayable",
    "type":"function"
  },
  {
    "inputs":[
      {
        "internalType":"address",
        "name":"_validator",
        "type":"address"
      },
      {
        "internalType":"uint256",
        "name":"_index",
        "type":"uint256"
      }
    ],
    "name":"removeValidator",
    "outputs":[

    ],
    "stateMutability":"nonpayable",
    "type":"function"
  },
  {
    "inputs":[
      {
        "internalType":"bytes32",
        "name":"role",
        "type":"bytes32"
      },
      {
        "internalType":"address",
        "name":"account",
        "type":"address"
      }
    ],
    "name":"renounceRole",
    "outputs":[

    ],
    "stateMutability":"nonpayable",
    "type":"function"
  },
  {
    "inputs":[
      {
        "internalType":"bytes32",
        "name":"role",
        "type":"bytes32"
      },
      {
        "internalType":"address",
        "name":"account",
        "type":"address"
      }
    ],
    "name":"revokeRole",
    "outputs":[

    ],
    "stateMutability":"nonpayable",
    "type":"function"
  },
  {
    "inputs":[

    ],
    "name":"rewardPercentage",
    "outputs":[
      {
        "internalType":"uint256",
        "name":"",
        "type":"uint256"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[
      {
        "internalType":"uint256",
        "name":"_burnPercentage",
        "type":"uint256"
      },
      {
        "internalType":"uint256",
        "name":"_fundPercentage",
        "type":"uint256"
      },
      {
        "internalType":"uint256",
        "name":"_rewardPercentage",
        "type":"uint256"
      }
    ],
    "name":"setPercentages",
    "outputs":[

    ],
    "stateMutability":"nonpayable",
    "type":"function"
  },
  {
    "inputs":[
      {
        "internalType":"uint256",
        "name":"_minStakeAmount",
        "type":"uint256"
      },
      {
        "internalType":"uint256",
        "name":"_maxStakeAmount",
        "type":"uint256"
      }
    ],
    "name":"setStakeAmounts",
    "outputs":[

    ],
    "stateMutability":"nonpayable",
    "type":"function"
  },
  {
    "inputs":[
      {
        "internalType":"uint256",
        "name":"_minStakeDuration",
        "type":"uint256"
      },
      {
        "internalType":"uint256",
        "name":"_maxStakeDuration",
        "type":"uint256"
      }
    ],
    "name":"setStakeDurations",
    "outputs":[

    ],
    "stateMutability":"nonpayable",
    "type":"function"
  },
  {
    "inputs":[
      {
        "internalType":"address",
        "name":"_validator",
        "type":"address"
      },
      {
        "internalType":"uint256",
        "name":"_wei",
        "type":"uint256"
      }
    ],
    "name":"slash",
    "outputs":[

    ],
    "stateMutability":"nonpayable",
    "type":"function"
  },
  {
    "inputs":[
      {
        "internalType":"uint256",
        "name":"_amount",
        "type":"uint256"
      },
      {
        "internalType":"uint256",
        "name":"_duration",
        "type":"uint256"
      }
    ],
    "name":"stake",
    "outputs":[

    ],
    "stateMutability":"nonpayable",
    "type":"function"
  },
  {
    "inputs":[
      {
        "internalType":"bytes4",
        "name":"interfaceId",
        "type":"bytes4"
      }
    ],
    "name":"supportsInterface",
    "outputs":[
      {
        "internalType":"bool",
        "name":"",
        "type":"bool"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[

    ],
    "name":"totalBurn",
    "outputs":[
      {
        "internalType":"uint256",
        "name":"",
        "type":"uint256"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[

    ],
    "name":"totalFund",
    "outputs":[
      {
        "internalType":"uint256",
        "name":"",
        "type":"uint256"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[

    ],
    "name":"totalReward",
    "outputs":[
      {
        "internalType":"uint256",
        "name":"",
        "type":"uint256"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[

    ],
    "name":"totalStake",
    "outputs":[
      {
        "internalType":"uint256",
        "name":"",
        "type":"uint256"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[

    ],
    "name":"unallocated",
    "outputs":[
      {
        "internalType":"uint256",
        "name":"",
        "type":"uint256"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[

    ],
    "name":"unstake",
    "outputs":[

    ],
    "stateMutability":"nonpayable",
    "type":"function"
  },
  {
    "inputs":[
      {
        "internalType":"address",
        "name":"_rewardAddress",
        "type":"address"
      }
    ],
    "name":"updateRewardAddress",
    "outputs":[

    ],
    "stateMutability":"nonpayable",
    "type":"function"
  },
  {
    "inputs":[
      {
        "internalType":"uint256",
        "name":"",
        "type":"uint256"
      }
    ],
    "name":"validators",
    "outputs":[
      {
        "internalType":"address",
        "name":"",
        "type":"address"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "stateMutability":"payable",
    "type":"receive"
  }
]
