[
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_vrfCoordinator",
        "type": "address"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [],
    "name": "EmptySendersList",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NotAllowedToSetSenders",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "UnauthorizedSender",
    "type": "error"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address[]",
        "name": "senders",
        "type": "address[]"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "changedBy",
        "type": "address"
      }
    ],
    "name": "AuthorizedSendersChanged",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      }
    ],
    "name": "OwnershipTransferRequested",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      }
    ],
    "name": "OwnershipTransferred",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "requestId",
        "type": "uint256"
      },
      {
        "indexed": true,
        "internalType": "uint64",
        "name": "subId",
        "type": "uint64"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      }
    ],
    "name": "RandomWordsForced",
    "type": "event"
  },
  {
    "inputs": [],
    "name": "acceptOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "acceptVRFOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256[2]",
        "name": "publicProvingKey",
        "type": "uint256[2]"
      }
    ],
    "name": "deregisterProvingKey",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "uint256[2]",
            "name": "pk",
            "type": "uint256[2]"
          },
          {
            "internalType": "uint256[2]",
            "name": "gamma",
            "type": "uint256[2]"
          },
          {
            "internalType": "uint256",
            "name": "c",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "s",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "seed",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "uWitness",
            "type": "address"
          },
          {
            "internalType": "uint256[2]",
            "name": "cGammaWitness",
            "type": "uint256[2]"
          },
          {
            "internalType": "uint256[2]",
            "name": "sHashWitness",
            "type": "uint256[2]"
          },
          {
            "internalType": "uint256",
            "name": "zInv",
            "type": "uint256"
          }
        ],
        "internalType": "struct VRFTypes.Proof",
        "name": "proof",
        "type": "tuple"
      },
      {
        "components": [
          {
            "internalType": "uint64",
            "name": "blockNum",
            "type": "uint64"
          },
          {
            "internalType": "uint64",
            "name": "subId",
            "type": "uint64"
          },
          {
            "internalType": "uint32",
            "name": "callbackGasLimit",
            "type": "uint32"
          },
          {
            "internalType": "uint32",
            "name": "numWords",
            "type": "uint32"
          },
          {
            "internalType": "address",
            "name": "sender",
            "type": "address"
          }
        ],
        "internalType": "struct VRFTypes.RequestCommitment",
        "name": "rc",
        "type": "tuple"
      }
    ],
    "name": "fulfillRandomWords",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getAuthorizedSenders",
    "outputs": [
      {
        "internalType": "address[]",
        "name": "",
        "type": "address[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getVRFCoordinator",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "sender",
        "type": "address"
      }
    ],
    "name": "isAuthorizedSender",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "owner",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint64",
        "name": "subId",
        "type": "uint64"
      }
    ],
    "name": "ownerCancelSubscription",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      }
    ],
    "name": "recoverFunds",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "oracle",
        "type": "address"
      },
      {
        "internalType": "uint256[2]",
        "name": "publicProvingKey",
        "type": "uint256[2]"
      }
    ],
    "name": "registerProvingKey",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address[]",
        "name": "senders",
        "type": "address[]"
      }
    ],
    "name": "setAuthorizedSenders",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "minimumRequestConfirmations",
        "type": "uint16"
      },
      {
        "internalType": "uint32",
        "name": "maxGasLimit",
        "type": "uint32"
      },
      {
        "internalType": "uint32",
        "name": "stalenessSeconds",
        "type": "uint32"
      },
      {
        "internalType": "uint32",
        "name": "gasAfterPaymentCalculation",
        "type": "uint32"
      },
      {
        "internalType": "int256",
        "name": "fallbackWeiPerUnitLink",
        "type": "int256"
      },
      {
        "components": [
          {
            "internalType": "uint32",
            "name": "fulfillmentFlatFeeLinkPPMTier1",
            "type": "uint32"
          },
          {
            "internalType": "uint32",
            "name": "fulfillmentFlatFeeLinkPPMTier2",
            "type": "uint32"
          },
          {
            "internalType": "uint32",
            "name": "fulfillmentFlatFeeLinkPPMTier3",
            "type": "uint32"
          },
          {
            "internalType": "uint32",
            "name": "fulfillmentFlatFeeLinkPPMTier4",
            "type": "uint32"
          },
          {
            "internalType": "uint32",
            "name": "fulfillmentFlatFeeLinkPPMTier5",
            "type": "uint32"
          },
          {
            "internalType": "uint24",
            "name": "reqsForTier2",
            "type": "uint24"
          },
          {
            "internalType": "uint24",
            "name": "reqsForTier3",
            "type": "uint24"
          },
          {
            "internalType": "uint24",
            "name": "reqsForTier4",
            "type": "uint24"
          },
          {
            "internalType": "uint24",
            "name": "reqsForTier5",
            "type": "uint24"
          }
        ],
        "internalType": "struct FeeConfig",
        "name": "feeConfig",
        "type": "tuple"
      }
    ],
    "name": "setConfig",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      }
    ],
    "name": "transferOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      }
    ],
    "name": "transferVRFOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]
