[
  {
    "inputs":[
      {
        "internalType":"address",
        "name":"_heroCoreAddress",
        "type":"address"
      },
      {
        "internalType":"address",
        "name":"_geneScienceAddress",
        "type":"address"
      }
    ],
    "stateMutability":"nonpayable",
    "type":"constructor"
  },
  {
    "anonymous":false,
    "inputs":[
      {
        "indexed":true,
        "internalType":"address",
        "name":"owner",
        "type":"address"
      },
      {
        "indexed":false,
        "internalType":"uint256",
        "name":"crystalId",
        "type":"uint256"
      },
      {
        "indexed":false,
        "internalType":"uint256",
        "name":"createdBlock",
        "type":"uint256"
      }
    ],
    "name":"CrystalAirdrop",
    "type":"event"
  },
  {
    "anonymous":false,
    "inputs":[
      {
        "indexed":true,
        "internalType":"address",
        "name":"owner",
        "type":"address"
      },
      {
        "indexed":false,
        "internalType":"uint256",
        "name":"crystalId",
        "type":"uint256"
      },
      {
        "indexed":false,
        "internalType":"uint256",
        "name":"heroId",
        "type":"uint256"
      }
    ],
    "name":"CrystalOpen",
    "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"
  },
  {
    "inputs":[

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

    ],
    "name":"MODERATOR_ROLE",
    "outputs":[
      {
        "internalType":"bytes32",
        "name":"",
        "type":"bytes32"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[
      {
        "internalType":"address",
        "name":"_recipient",
        "type":"address"
      }
    ],
    "name":"airdropCrystal",
    "outputs":[

    ],
    "stateMutability":"nonpayable",
    "type":"function"
  },
  {
    "inputs":[
      {
        "internalType":"uint256",
        "name":"",
        "type":"uint256"
      }
    ],
    "name":"crystals",
    "outputs":[
      {
        "internalType":"address",
        "name":"owner",
        "type":"address"
      },
      {
        "internalType":"uint256",
        "name":"summonerId",
        "type":"uint256"
      },
      {
        "internalType":"uint256",
        "name":"assistantId",
        "type":"uint256"
      },
      {
        "internalType":"uint16",
        "name":"generation",
        "type":"uint16"
      },
      {
        "internalType":"uint256",
        "name":"createdBlock",
        "type":"uint256"
      },
      {
        "internalType":"uint256",
        "name":"heroId",
        "type":"uint256"
      },
      {
        "internalType":"uint8",
        "name":"summonerTears",
        "type":"uint8"
      },
      {
        "internalType":"uint8",
        "name":"assistantTears",
        "type":"uint8"
      },
      {
        "internalType":"address",
        "name":"bonusItem",
        "type":"address"
      },
      {
        "internalType":"uint32",
        "name":"maxSummons",
        "type":"uint32"
      },
      {
        "internalType":"uint32",
        "name":"firstName",
        "type":"uint32"
      },
      {
        "internalType":"uint32",
        "name":"lastName",
        "type":"uint32"
      },
      {
        "internalType":"uint8",
        "name":"shinyStyle",
        "type":"uint8"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[

    ],
    "name":"enabled",
    "outputs":[
      {
        "internalType":"bool",
        "name":"",
        "type":"bool"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[
      {
        "internalType":"uint256",
        "name":"randomNumber",
        "type":"uint256"
      },
      {
        "internalType":"uint256",
        "name":"digits",
        "type":"uint256"
      },
      {
        "internalType":"uint256",
        "name":"offset",
        "type":"uint256"
      }
    ],
    "name":"extractNumber",
    "outputs":[
      {
        "internalType":"uint256",
        "name":"result",
        "type":"uint256"
      }
    ],
    "stateMutability":"pure",
    "type":"function"
  },
  {
    "inputs":[
      {
        "internalType":"uint256",
        "name":"_crystalId",
        "type":"uint256"
      }
    ],
    "name":"getCrystal",
    "outputs":[
      {
        "components":[
          {
            "internalType":"address",
            "name":"owner",
            "type":"address"
          },
          {
            "internalType":"uint256",
            "name":"summonerId",
            "type":"uint256"
          },
          {
            "internalType":"uint256",
            "name":"assistantId",
            "type":"uint256"
          },
          {
            "internalType":"uint16",
            "name":"generation",
            "type":"uint16"
          },
          {
            "internalType":"uint256",
            "name":"createdBlock",
            "type":"uint256"
          },
          {
            "internalType":"uint256",
            "name":"heroId",
            "type":"uint256"
          },
          {
            "internalType":"uint8",
            "name":"summonerTears",
            "type":"uint8"
          },
          {
            "internalType":"uint8",
            "name":"assistantTears",
            "type":"uint8"
          },
          {
            "internalType":"address",
            "name":"bonusItem",
            "type":"address"
          },
          {
            "internalType":"uint32",
            "name":"maxSummons",
            "type":"uint32"
          },
          {
            "internalType":"uint32",
            "name":"firstName",
            "type":"uint32"
          },
          {
            "internalType":"uint32",
            "name":"lastName",
            "type":"uint32"
          },
          {
            "internalType":"uint8",
            "name":"shinyStyle",
            "type":"uint8"
          }
        ],
        "internalType":"struct ICrystalTypes.HeroCrystal",
        "name":"",
        "type":"tuple"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[
      {
        "internalType":"bytes32",
        "name":"role",
        "type":"bytes32"
      }
    ],
    "name":"getRoleAdmin",
    "outputs":[
      {
        "internalType":"bytes32",
        "name":"",
        "type":"bytes32"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[
      {
        "internalType":"address",
        "name":"_address",
        "type":"address"
      }
    ],
    "name":"getUserCrystals",
    "outputs":[
      {
        "internalType":"uint256[]",
        "name":"",
        "type":"uint256[]"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[
      {
        "internalType":"bytes32",
        "name":"role",
        "type":"bytes32"
      },
      {
        "internalType":"address",
        "name":"account",
        "type":"address"
      }
    ],
    "name":"grantRole",
    "outputs":[

    ],
    "stateMutability":"nonpayable",
    "type":"function"
  },
  {
    "inputs":[
      {
        "internalType":"bytes32",
        "name":"role",
        "type":"bytes32"
      },
      {
        "internalType":"address",
        "name":"account",
        "type":"address"
      }
    ],
    "name":"hasRole",
    "outputs":[
      {
        "internalType":"bool",
        "name":"",
        "type":"bool"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[
      {
        "internalType":"uint256",
        "name":"_crystalId",
        "type":"uint256"
      }
    ],
    "name":"open",
    "outputs":[
      {
        "internalType":"uint256",
        "name":"",
        "type":"uint256"
      }
    ],
    "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":[
      {
        "internalType":"bytes4",
        "name":"interfaceId",
        "type":"bytes4"
      }
    ],
    "name":"supportsInterface",
    "outputs":[
      {
        "internalType":"bool",
        "name":"",
        "type":"bool"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[

    ],
    "name":"toggleEnabled",
    "outputs":[

    ],
    "stateMutability":"nonpayable",
    "type":"function"
  },
  {
    "inputs":[
      {
        "internalType":"address",
        "name":"",
        "type":"address"
      },
      {
        "internalType":"uint256",
        "name":"",
        "type":"uint256"
      }
    ],
    "name":"userCrystals",
    "outputs":[
      {
        "internalType":"uint256",
        "name":"",
        "type":"uint256"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  },
  {
    "inputs":[
      {
        "internalType":"uint256",
        "name":"blockNumber",
        "type":"uint256"
      }
    ],
    "name":"vrf",
    "outputs":[
      {
        "internalType":"bytes32",
        "name":"result",
        "type":"bytes32"
      }
    ],
    "stateMutability":"view",
    "type":"function"
  }
]
