[
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address",
        "name": "provider",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint128",
        "name": "oldFee",
        "type": "uint128"
      },
      {
        "indexed": false,
        "internalType": "uint128",
        "name": "newFee",
        "type": "uint128"
      }
    ],
    "name": "ProviderFeeUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address",
        "name": "provider",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "bytes",
        "name": "oldUri",
        "type": "bytes"
      },
      {
        "indexed": false,
        "internalType": "bytes",
        "name": "newUri",
        "type": "bytes"
      }
    ],
    "name": "ProviderUriUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "components": [
          {
            "internalType": "uint128",
            "name": "feeInWei",
            "type": "uint128"
          },
          {
            "internalType": "uint128",
            "name": "accruedFeesInWei",
            "type": "uint128"
          },
          {
            "internalType": "bytes32",
            "name": "originalCommitment",
            "type": "bytes32"
          },
          {
            "internalType": "uint64",
            "name": "originalCommitmentSequenceNumber",
            "type": "uint64"
          },
          {
            "internalType": "bytes",
            "name": "commitmentMetadata",
            "type": "bytes"
          },
          {
            "internalType": "bytes",
            "name": "uri",
            "type": "bytes"
          },
          {
            "internalType": "uint64",
            "name": "endSequenceNumber",
            "type": "uint64"
          },
          {
            "internalType": "uint64",
            "name": "sequenceNumber",
            "type": "uint64"
          },
          {
            "internalType": "bytes32",
            "name": "currentCommitment",
            "type": "bytes32"
          },
          {
            "internalType": "uint64",
            "name": "currentCommitmentSequenceNumber",
            "type": "uint64"
          }
        ],
        "indexed": false,
        "internalType": "struct EntropyStructs.ProviderInfo",
        "name": "provider",
        "type": "tuple"
      }
    ],
    "name": "Registered",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "provider",
            "type": "address"
          },
          {
            "internalType": "uint64",
            "name": "sequenceNumber",
            "type": "uint64"
          },
          {
            "internalType": "uint32",
            "name": "numHashes",
            "type": "uint32"
          },
          {
            "internalType": "bytes32",
            "name": "commitment",
            "type": "bytes32"
          },
          {
            "internalType": "uint64",
            "name": "blockNumber",
            "type": "uint64"
          },
          {
            "internalType": "address",
            "name": "requester",
            "type": "address"
          },
          {
            "internalType": "bool",
            "name": "useBlockhash",
            "type": "bool"
          },
          {
            "internalType": "bool",
            "name": "isRequestWithCallback",
            "type": "bool"
          }
        ],
        "indexed": false,
        "internalType": "struct EntropyStructs.Request",
        "name": "request",
        "type": "tuple"
      }
    ],
    "name": "Requested",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "provider",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "requestor",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint64",
        "name": "sequenceNumber",
        "type": "uint64"
      },
      {
        "indexed": false,
        "internalType": "bytes32",
        "name": "userRandomNumber",
        "type": "bytes32"
      },
      {
        "components": [
          {
            "internalType": "address",
            "name": "provider",
            "type": "address"
          },
          {
            "internalType": "uint64",
            "name": "sequenceNumber",
            "type": "uint64"
          },
          {
            "internalType": "uint32",
            "name": "numHashes",
            "type": "uint32"
          },
          {
            "internalType": "bytes32",
            "name": "commitment",
            "type": "bytes32"
          },
          {
            "internalType": "uint64",
            "name": "blockNumber",
            "type": "uint64"
          },
          {
            "internalType": "address",
            "name": "requester",
            "type": "address"
          },
          {
            "internalType": "bool",
            "name": "useBlockhash",
            "type": "bool"
          },
          {
            "internalType": "bool",
            "name": "isRequestWithCallback",
            "type": "bool"
          }
        ],
        "indexed": false,
        "internalType": "struct EntropyStructs.Request",
        "name": "request",
        "type": "tuple"
      }
    ],
    "name": "RequestedWithCallback",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "provider",
            "type": "address"
          },
          {
            "internalType": "uint64",
            "name": "sequenceNumber",
            "type": "uint64"
          },
          {
            "internalType": "uint32",
            "name": "numHashes",
            "type": "uint32"
          },
          {
            "internalType": "bytes32",
            "name": "commitment",
            "type": "bytes32"
          },
          {
            "internalType": "uint64",
            "name": "blockNumber",
            "type": "uint64"
          },
          {
            "internalType": "address",
            "name": "requester",
            "type": "address"
          },
          {
            "internalType": "bool",
            "name": "useBlockhash",
            "type": "bool"
          },
          {
            "internalType": "bool",
            "name": "isRequestWithCallback",
            "type": "bool"
          }
        ],
        "indexed": false,
        "internalType": "struct EntropyStructs.Request",
        "name": "request",
        "type": "tuple"
      },
      {
        "indexed": false,
        "internalType": "bytes32",
        "name": "userRevelation",
        "type": "bytes32"
      },
      {
        "indexed": false,
        "internalType": "bytes32",
        "name": "providerRevelation",
        "type": "bytes32"
      },
      {
        "indexed": false,
        "internalType": "bytes32",
        "name": "blockHash",
        "type": "bytes32"
      },
      {
        "indexed": false,
        "internalType": "bytes32",
        "name": "randomNumber",
        "type": "bytes32"
      }
    ],
    "name": "Revealed",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "provider",
            "type": "address"
          },
          {
            "internalType": "uint64",
            "name": "sequenceNumber",
            "type": "uint64"
          },
          {
            "internalType": "uint32",
            "name": "numHashes",
            "type": "uint32"
          },
          {
            "internalType": "bytes32",
            "name": "commitment",
            "type": "bytes32"
          },
          {
            "internalType": "uint64",
            "name": "blockNumber",
            "type": "uint64"
          },
          {
            "internalType": "address",
            "name": "requester",
            "type": "address"
          },
          {
            "internalType": "bool",
            "name": "useBlockhash",
            "type": "bool"
          },
          {
            "internalType": "bool",
            "name": "isRequestWithCallback",
            "type": "bool"
          }
        ],
        "indexed": false,
        "internalType": "struct EntropyStructs.Request",
        "name": "request",
        "type": "tuple"
      },
      {
        "indexed": false,
        "internalType": "bytes32",
        "name": "userRandomNumber",
        "type": "bytes32"
      },
      {
        "indexed": false,
        "internalType": "bytes32",
        "name": "providerRevelation",
        "type": "bytes32"
      },
      {
        "indexed": false,
        "internalType": "bytes32",
        "name": "randomNumber",
        "type": "bytes32"
      }
    ],
    "name": "RevealedWithCallback",
    "type": "event"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "userRandomness",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "providerRandomness",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "blockHash",
        "type": "bytes32"
      }
    ],
    "name": "combineRandomValues",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "combinedRandomness",
        "type": "bytes32"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "userRandomness",
        "type": "bytes32"
      }
    ],
    "name": "constructUserCommitment",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "userCommitment",
        "type": "bytes32"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getAccruedPythFees",
    "outputs": [
      {
        "internalType": "uint128",
        "name": "accruedPythFeesInWei",
        "type": "uint128"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getDefaultProvider",
    "outputs": [
      {
        "internalType": "address",
        "name": "provider",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "provider",
        "type": "address"
      }
    ],
    "name": "getFee",
    "outputs": [
      {
        "internalType": "uint128",
        "name": "feeAmount",
        "type": "uint128"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "provider",
        "type": "address"
      }
    ],
    "name": "getProviderInfo",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint128",
            "name": "feeInWei",
            "type": "uint128"
          },
          {
            "internalType": "uint128",
            "name": "accruedFeesInWei",
            "type": "uint128"
          },
          {
            "internalType": "bytes32",
            "name": "originalCommitment",
            "type": "bytes32"
          },
          {
            "internalType": "uint64",
            "name": "originalCommitmentSequenceNumber",
            "type": "uint64"
          },
          {
            "internalType": "bytes",
            "name": "commitmentMetadata",
            "type": "bytes"
          },
          {
            "internalType": "bytes",
            "name": "uri",
            "type": "bytes"
          },
          {
            "internalType": "uint64",
            "name": "endSequenceNumber",
            "type": "uint64"
          },
          {
            "internalType": "uint64",
            "name": "sequenceNumber",
            "type": "uint64"
          },
          {
            "internalType": "bytes32",
            "name": "currentCommitment",
            "type": "bytes32"
          },
          {
            "internalType": "uint64",
            "name": "currentCommitmentSequenceNumber",
            "type": "uint64"
          }
        ],
        "internalType": "struct EntropyStructs.ProviderInfo",
        "name": "info",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "provider",
        "type": "address"
      },
      {
        "internalType": "uint64",
        "name": "sequenceNumber",
        "type": "uint64"
      }
    ],
    "name": "getRequest",
    "outputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "provider",
            "type": "address"
          },
          {
            "internalType": "uint64",
            "name": "sequenceNumber",
            "type": "uint64"
          },
          {
            "internalType": "uint32",
            "name": "numHashes",
            "type": "uint32"
          },
          {
            "internalType": "bytes32",
            "name": "commitment",
            "type": "bytes32"
          },
          {
            "internalType": "uint64",
            "name": "blockNumber",
            "type": "uint64"
          },
          {
            "internalType": "address",
            "name": "requester",
            "type": "address"
          },
          {
            "internalType": "bool",
            "name": "useBlockhash",
            "type": "bool"
          },
          {
            "internalType": "bool",
            "name": "isRequestWithCallback",
            "type": "bool"
          }
        ],
        "internalType": "struct EntropyStructs.Request",
        "name": "req",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint128",
        "name": "feeInWei",
        "type": "uint128"
      },
      {
        "internalType": "bytes32",
        "name": "commitment",
        "type": "bytes32"
      },
      {
        "internalType": "bytes",
        "name": "commitmentMetadata",
        "type": "bytes"
      },
      {
        "internalType": "uint64",
        "name": "chainLength",
        "type": "uint64"
      },
      {
        "internalType": "bytes",
        "name": "uri",
        "type": "bytes"
      }
    ],
    "name": "register",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "provider",
        "type": "address"
      },
      {
        "internalType": "bytes32",
        "name": "userCommitment",
        "type": "bytes32"
      },
      {
        "internalType": "bool",
        "name": "useBlockHash",
        "type": "bool"
      }
    ],
    "name": "request",
    "outputs": [
      {
        "internalType": "uint64",
        "name": "assignedSequenceNumber",
        "type": "uint64"
      }
    ],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "provider",
        "type": "address"
      },
      {
        "internalType": "bytes32",
        "name": "userRandomNumber",
        "type": "bytes32"
      }
    ],
    "name": "requestWithCallback",
    "outputs": [
      {
        "internalType": "uint64",
        "name": "assignedSequenceNumber",
        "type": "uint64"
      }
    ],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "provider",
        "type": "address"
      },
      {
        "internalType": "uint64",
        "name": "sequenceNumber",
        "type": "uint64"
      },
      {
        "internalType": "bytes32",
        "name": "userRevelation",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "providerRevelation",
        "type": "bytes32"
      }
    ],
    "name": "reveal",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "randomNumber",
        "type": "bytes32"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "provider",
        "type": "address"
      },
      {
        "internalType": "uint64",
        "name": "sequenceNumber",
        "type": "uint64"
      },
      {
        "internalType": "bytes32",
        "name": "userRandomNumber",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "providerRevelation",
        "type": "bytes32"
      }
    ],
    "name": "revealWithCallback",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint128",
        "name": "newFeeInWei",
        "type": "uint128"
      }
    ],
    "name": "setProviderFee",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes",
        "name": "newUri",
        "type": "bytes"
      }
    ],
    "name": "setProviderUri",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint128",
        "name": "amount",
        "type": "uint128"
      }
    ],
    "name": "withdraw",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]
