| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- // SPDX-License-Identifier: Apache 2
- pragma solidity ^0.8.0;
- import "./EntropyEvents.sol";
- import "./EntropyEventsV2.sol";
- import "./EntropyStructsV2.sol";
- interface IEntropyV2 is EntropyEventsV2 {
- /// @notice Request a random number using the default provider with default gas limit
- /// @return assignedSequenceNumber A unique identifier for this request
- /// @dev The address calling this function should be a contract that inherits from the IEntropyConsumer interface.
- /// The `entropyCallback` method on that interface will receive a callback with the returned sequence number and
- /// the generated random number.
- ///
- /// `entropyCallback` will be run with the provider's configured default gas limit.
- ///
- /// This method will revert unless the caller provides a sufficient fee (at least `getFeeV2()`) as msg.value.
- /// Note that the fee can change over time. Callers of this method should explicitly compute `getFeeV2()`
- /// prior to each invocation (as opposed to hardcoding a value). Further note that excess value is *not* refunded to the caller.
- ///
- /// Note that this method uses an in-contract PRNG to generate the user's contribution to the random number.
- /// This approach modifies the security guarantees such that a dishonest validator and provider can
- /// collude to manipulate the result (as opposed to a malicious user and provider). That is, the user
- /// now trusts the validator honestly draw a random number. If you wish to avoid this trust assumption,
- /// call a variant of `requestV2` that accepts a `userRandomNumber` parameter.
- function requestV2()
- external
- payable
- returns (uint64 assignedSequenceNumber);
- /// @notice Request a random number using the default provider with specified gas limit
- /// @param gasLimit The gas limit for the callback function.
- /// @return assignedSequenceNumber A unique identifier for this request
- /// @dev The address calling this function should be a contract that inherits from the IEntropyConsumer interface.
- /// The `entropyCallback` method on that interface will receive a callback with the returned sequence number and
- /// the generated random number.
- ///
- /// `entropyCallback` will be run with the `gasLimit` provided to this function.
- /// The `gasLimit` will be rounded up to a multiple of 10k (e.g., 19000 -> 20000), and furthermore is lower bounded
- /// by the provider's configured default limit.
- ///
- /// This method will revert unless the caller provides a sufficient fee (at least `getFeeV2(gasLimit)`) as msg.value.
- /// Note that the fee can change over time. Callers of this method should explicitly compute `getFeeV2(gasLimit)`
- /// prior to each invocation (as opposed to hardcoding a value). Further note that excess value is *not* refunded to the caller.
- ///
- /// Note that this method uses an in-contract PRNG to generate the user's contribution to the random number.
- /// This approach modifies the security guarantees such that a dishonest validator and provider can
- /// collude to manipulate the result (as opposed to a malicious user and provider). That is, the user
- /// now trusts the validator honestly draw a random number. If you wish to avoid this trust assumption,
- /// call a variant of `requestV2` that accepts a `userRandomNumber` parameter.
- function requestV2(
- uint32 gasLimit
- ) external payable returns (uint64 assignedSequenceNumber);
- /// @notice Request a random number from a specific provider with specified gas limit
- /// @param provider The address of the provider to request from
- /// @param gasLimit The gas limit for the callback function
- /// @return assignedSequenceNumber A unique identifier for this request
- /// @dev The address calling this function should be a contract that inherits from the IEntropyConsumer interface.
- /// The `entropyCallback` method on that interface will receive a callback with the returned sequence number and
- /// the generated random number.
- ///
- /// `entropyCallback` will be run with the `gasLimit` provided to this function.
- /// The `gasLimit` will be rounded up to a multiple of 10k (e.g., 19000 -> 20000), and furthermore is lower bounded
- /// by the provider's configured default limit.
- ///
- /// This method will revert unless the caller provides a sufficient fee (at least `getFeeV2(provider, gasLimit)`) as msg.value.
- /// Note that provider fees can change over time. Callers of this method should explicitly compute `getFeeV2(provider, gasLimit)`
- /// prior to each invocation (as opposed to hardcoding a value). Further note that excess value is *not* refunded to the caller.
- ///
- /// Note that this method uses an in-contract PRNG to generate the user's contribution to the random number.
- /// This approach modifies the security guarantees such that a dishonest validator and provider can
- /// collude to manipulate the result (as opposed to a malicious user and provider). That is, the user
- /// now trusts the validator honestly draw a random number. If you wish to avoid this trust assumption,
- /// call a variant of `requestV2` that accepts a `userRandomNumber` parameter.
- function requestV2(
- address provider,
- uint32 gasLimit
- ) external payable returns (uint64 assignedSequenceNumber);
- /// @notice Request a random number from a specific provider with a user-provided random number and gas limit
- /// @param provider The address of the provider to request from
- /// @param userRandomNumber A random number provided by the user for additional entropy
- /// @param gasLimit The gas limit for the callback function. Pass 0 to get a sane default value -- see note below.
- /// @return assignedSequenceNumber A unique identifier for this request
- /// @dev The address calling this function should be a contract that inherits from the IEntropyConsumer interface.
- /// The `entropyCallback` method on that interface will receive a callback with the returned sequence number and
- /// the generated random number.
- ///
- /// `entropyCallback` will be run with the `gasLimit` provided to this function.
- /// The `gasLimit` will be rounded up to a multiple of 10k (e.g., 19000 -> 20000), and furthermore is lower bounded
- /// by the provider's configured default limit.
- ///
- /// This method will revert unless the caller provides a sufficient fee (at least `getFeeV2(provider, gasLimit)`) as msg.value.
- /// Note that provider fees can change over time. Callers of this method should explicitly compute `getFeeV2(provider, gasLimit)`
- /// prior to each invocation (as opposed to hardcoding a value). Further note that excess value is *not* refunded to the caller.
- function requestV2(
- address provider,
- bytes32 userRandomNumber,
- uint32 gasLimit
- ) external payable returns (uint64 assignedSequenceNumber);
- /// @notice Get information about a specific entropy provider
- /// @param provider The address of the provider to query
- /// @return info The provider information including configuration, fees, and operational status
- /// @dev This method returns detailed information about a provider's configuration and capabilities.
- /// The returned ProviderInfo struct contains information such as the provider's fee structure and gas limits.
- function getProviderInfoV2(
- address provider
- ) external view returns (EntropyStructsV2.ProviderInfo memory info);
- /// @notice Get the address of the default entropy provider
- /// @return provider The address of the default provider
- /// @dev This method returns the address of the provider that will be used when no specific provider is specified
- /// in the requestV2 calls. The default provider can be used to get the base fee and gas limit information.
- function getDefaultProvider() external view returns (address provider);
- /// @notice Get information about a specific request
- /// @param provider The address of the provider that handled the request
- /// @param sequenceNumber The unique identifier of the request
- /// @return req The request information including status, random number, and other metadata
- /// @dev This method allows querying the state of a previously made request. The returned Request struct
- /// contains information about whether the request was fulfilled, the generated random number (if available),
- /// and other metadata about the request.
- function getRequestV2(
- address provider,
- uint64 sequenceNumber
- ) external view returns (EntropyStructsV2.Request memory req);
- /// @notice Get the fee charged by the default provider for the default gas limit
- /// @return feeAmount The fee amount in wei
- /// @dev This method returns the base fee required to make a request using the default provider with
- /// the default gas limit. This fee should be passed as msg.value when calling requestV2().
- /// The fee can change over time, so this method should be called before each request.
- function getFeeV2() external view returns (uint128 feeAmount);
- /// @notice Get the fee charged by the default provider for a specific gas limit
- /// @param gasLimit The gas limit for the callback function
- /// @return feeAmount The fee amount in wei
- /// @dev This method returns the fee required to make a request using the default provider with
- /// the specified gas limit. This fee should be passed as msg.value when calling requestV2(gasLimit).
- /// The fee can change over time, so this method should be called before each request.
- function getFeeV2(
- uint32 gasLimit
- ) external view returns (uint128 feeAmount);
- /// @notice Get the fee charged by a specific provider for a request with a given gas limit
- /// @param provider The address of the provider to query
- /// @param gasLimit The gas limit for the callback function
- /// @return feeAmount The fee amount in wei
- /// @dev This method returns the fee required to make a request using the specified provider with
- /// the given gas limit. This fee should be passed as msg.value when calling requestV2(provider, gasLimit)
- /// or requestV2(provider, userRandomNumber, gasLimit). The fee can change over time, so this method
- /// should be called before each request.
- function getFeeV2(
- address provider,
- uint32 gasLimit
- ) external view returns (uint128 feeAmount);
- }
|