Front end and contract
This commit is contained in:
12
contracts/interfaces/AddressWhitelistInterface.sol
Normal file
12
contracts/interfaces/AddressWhitelistInterface.sol
Normal file
@@ -0,0 +1,12 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
pragma solidity ^0.8.0;
|
||||
|
||||
interface AddressWhitelistInterface {
|
||||
function addToWhitelist(address newElement) external;
|
||||
|
||||
function removeFromWhitelist(address newElement) external;
|
||||
|
||||
function isOnWhitelist(address newElement) external view returns (bool);
|
||||
|
||||
function getWhitelist() external view returns (address[] memory);
|
||||
}
|
||||
22
contracts/interfaces/FinderInterface.sol
Normal file
22
contracts/interfaces/FinderInterface.sol
Normal file
@@ -0,0 +1,22 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
pragma solidity ^0.8.0;
|
||||
|
||||
/**
|
||||
* @title Provides addresses of the live contracts implementing certain interfaces.
|
||||
* @dev Examples are the Oracle or Store interfaces.
|
||||
*/
|
||||
interface FinderInterface {
|
||||
/**
|
||||
* @notice Updates the address of the contract that implements `interfaceName`.
|
||||
* @param interfaceName bytes32 encoding of the interface name that is either changed or registered.
|
||||
* @param implementationAddress address of the deployed contract that implements the interface.
|
||||
*/
|
||||
function changeImplementationAddress(bytes32 interfaceName, address implementationAddress) external;
|
||||
|
||||
/**
|
||||
* @notice Gets the address of the contract that implements the given `interfaceName`.
|
||||
* @param interfaceName queried interface.
|
||||
* @return implementationAddress address of the deployed contract that implements the interface.
|
||||
*/
|
||||
function getImplementationAddress(bytes32 interfaceName) external view returns (address);
|
||||
}
|
||||
28
contracts/interfaces/IdentifierWhitelistInterface.sol
Normal file
28
contracts/interfaces/IdentifierWhitelistInterface.sol
Normal file
@@ -0,0 +1,28 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
pragma solidity ^0.8.0;
|
||||
|
||||
/**
|
||||
* @title Interface for whitelists of supported identifiers that the oracle can provide prices for.
|
||||
*/
|
||||
interface IdentifierWhitelistInterface {
|
||||
/**
|
||||
* @notice Adds the provided identifier as a supported identifier.
|
||||
* @dev Price requests using this identifier will succeed after this call.
|
||||
* @param identifier bytes32 encoding of the string identifier. Eg: BTC/USD.
|
||||
*/
|
||||
function addSupportedIdentifier(bytes32 identifier) external;
|
||||
|
||||
/**
|
||||
* @notice Removes the identifier from the whitelist.
|
||||
* @dev Price requests using this identifier will no longer succeed after this call.
|
||||
* @param identifier bytes32 encoding of the string identifier. Eg: BTC/USD.
|
||||
*/
|
||||
function removeSupportedIdentifier(bytes32 identifier) external;
|
||||
|
||||
/**
|
||||
* @notice Checks whether an identifier is on the whitelist.
|
||||
* @param identifier bytes32 encoding of the string identifier. Eg: BTC/USD.
|
||||
* @return bool if the identifier is supported (or not).
|
||||
*/
|
||||
function isIdentifierSupported(bytes32 identifier) external view returns (bool);
|
||||
}
|
||||
360
contracts/interfaces/OptimisticOracleV2Interface.sol
Normal file
360
contracts/interfaces/OptimisticOracleV2Interface.sol
Normal file
@@ -0,0 +1,360 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
pragma solidity ^0.8.0;
|
||||
|
||||
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
||||
import "./FinderInterface.sol";
|
||||
|
||||
/**
|
||||
* @title Financial contract facing Oracle interface.
|
||||
* @dev Interface used by financial contracts to interact with the Oracle. Voters will use a different interface.
|
||||
*/
|
||||
abstract contract OptimisticOracleV2Interface {
|
||||
event RequestPrice(
|
||||
address indexed requester,
|
||||
bytes32 identifier,
|
||||
uint256 timestamp,
|
||||
bytes ancillaryData,
|
||||
address currency,
|
||||
uint256 reward,
|
||||
uint256 finalFee
|
||||
);
|
||||
event ProposePrice(
|
||||
address indexed requester,
|
||||
address indexed proposer,
|
||||
bytes32 identifier,
|
||||
uint256 timestamp,
|
||||
bytes ancillaryData,
|
||||
int256 proposedPrice,
|
||||
uint256 expirationTimestamp,
|
||||
address currency
|
||||
);
|
||||
event DisputePrice(
|
||||
address indexed requester,
|
||||
address indexed proposer,
|
||||
address indexed disputer,
|
||||
bytes32 identifier,
|
||||
uint256 timestamp,
|
||||
bytes ancillaryData,
|
||||
int256 proposedPrice
|
||||
);
|
||||
event Settle(
|
||||
address indexed requester,
|
||||
address indexed proposer,
|
||||
address indexed disputer,
|
||||
bytes32 identifier,
|
||||
uint256 timestamp,
|
||||
bytes ancillaryData,
|
||||
int256 price,
|
||||
uint256 payout
|
||||
);
|
||||
// Struct representing the state of a price request.
|
||||
enum State {
|
||||
Invalid, // Never requested.
|
||||
Requested, // Requested, no other actions taken.
|
||||
Proposed, // Proposed, but not expired or disputed yet.
|
||||
Expired, // Proposed, not disputed, past liveness.
|
||||
Disputed, // Disputed, but no DVM price returned yet.
|
||||
Resolved, // Disputed and DVM price is available.
|
||||
Settled // Final price has been set in the contract (can get here from Expired or Resolved).
|
||||
}
|
||||
|
||||
struct RequestSettings {
|
||||
bool eventBased; // True if the request is set to be event-based.
|
||||
bool refundOnDispute; // True if the requester should be refunded their reward on dispute.
|
||||
bool callbackOnPriceProposed; // True if callbackOnPriceProposed callback is required.
|
||||
bool callbackOnPriceDisputed; // True if callbackOnPriceDisputed callback is required.
|
||||
bool callbackOnPriceSettled; // True if callbackOnPriceSettled callback is required.
|
||||
uint256 bond; // Bond that the proposer and disputer must pay on top of the final fee.
|
||||
uint256 customLiveness; // Custom liveness value set by the requester.
|
||||
}
|
||||
|
||||
// Struct representing a price request.
|
||||
struct Request {
|
||||
address proposer; // Address of the proposer.
|
||||
address disputer; // Address of the disputer.
|
||||
IERC20 currency; // ERC20 token used to pay rewards and fees.
|
||||
bool settled; // True if the request is settled.
|
||||
RequestSettings requestSettings; // Custom settings associated with a request.
|
||||
int256 proposedPrice; // Price that the proposer submitted.
|
||||
int256 resolvedPrice; // Price resolved once the request is settled.
|
||||
uint256 expirationTime; // Time at which the request auto-settles without a dispute.
|
||||
uint256 reward; // Amount of the currency to pay to the proposer on settlement.
|
||||
uint256 finalFee; // Final fee to pay to the Store upon request to the DVM.
|
||||
}
|
||||
|
||||
// This value must be <= the Voting contract's `ancillaryBytesLimit` value otherwise it is possible
|
||||
// that a price can be requested to this contract successfully, but cannot be disputed because the DVM refuses
|
||||
// to accept a price request made with ancillary data length over a certain size.
|
||||
uint256 public constant ancillaryBytesLimit = 8192;
|
||||
|
||||
function defaultLiveness() external view virtual returns (uint256);
|
||||
|
||||
function finder() external view virtual returns (FinderInterface);
|
||||
|
||||
function getCurrentTime() external view virtual returns (uint256);
|
||||
|
||||
// Note: this is required so that typechain generates a return value with named fields.
|
||||
mapping(bytes32 => Request) public requests;
|
||||
|
||||
/**
|
||||
* @notice Requests a new price.
|
||||
* @param identifier price identifier being requested.
|
||||
* @param timestamp timestamp of the price being requested.
|
||||
* @param ancillaryData ancillary data representing additional args being passed with the price request.
|
||||
* @param currency ERC20 token used for payment of rewards and fees. Must be approved for use with the DVM.
|
||||
* @param reward reward offered to a successful proposer. Will be pulled from the caller. Note: this can be 0,
|
||||
* which could make sense if the contract requests and proposes the value in the same call or
|
||||
* provides its own reward system.
|
||||
* @return totalBond default bond (final fee) + final fee that the proposer and disputer will be required to pay.
|
||||
* This can be changed with a subsequent call to setBond().
|
||||
*/
|
||||
function requestPrice(
|
||||
bytes32 identifier,
|
||||
uint256 timestamp,
|
||||
bytes memory ancillaryData,
|
||||
IERC20 currency,
|
||||
uint256 reward
|
||||
) external virtual returns (uint256 totalBond);
|
||||
|
||||
/**
|
||||
* @notice Set the proposal bond associated with a price request.
|
||||
* @param identifier price identifier to identify the existing request.
|
||||
* @param timestamp timestamp to identify the existing request.
|
||||
* @param ancillaryData ancillary data of the price being requested.
|
||||
* @param bond custom bond amount to set.
|
||||
* @return totalBond new bond + final fee that the proposer and disputer will be required to pay. This can be
|
||||
* changed again with a subsequent call to setBond().
|
||||
*/
|
||||
function setBond(
|
||||
bytes32 identifier,
|
||||
uint256 timestamp,
|
||||
bytes memory ancillaryData,
|
||||
uint256 bond
|
||||
) external virtual returns (uint256 totalBond);
|
||||
|
||||
/**
|
||||
* @notice Sets the request to refund the reward if the proposal is disputed. This can help to "hedge" the caller
|
||||
* in the event of a dispute-caused delay. Note: in the event of a dispute, the winner still receives the other's
|
||||
* bond, so there is still profit to be made even if the reward is refunded.
|
||||
* @param identifier price identifier to identify the existing request.
|
||||
* @param timestamp timestamp to identify the existing request.
|
||||
* @param ancillaryData ancillary data of the price being requested.
|
||||
*/
|
||||
function setRefundOnDispute(
|
||||
bytes32 identifier,
|
||||
uint256 timestamp,
|
||||
bytes memory ancillaryData
|
||||
) external virtual;
|
||||
|
||||
/**
|
||||
* @notice Sets a custom liveness value for the request. Liveness is the amount of time a proposal must wait before
|
||||
* being auto-resolved.
|
||||
* @param identifier price identifier to identify the existing request.
|
||||
* @param timestamp timestamp to identify the existing request.
|
||||
* @param ancillaryData ancillary data of the price being requested.
|
||||
* @param customLiveness new custom liveness.
|
||||
*/
|
||||
function setCustomLiveness(
|
||||
bytes32 identifier,
|
||||
uint256 timestamp,
|
||||
bytes memory ancillaryData,
|
||||
uint256 customLiveness
|
||||
) external virtual;
|
||||
|
||||
/**
|
||||
* @notice Sets the request to be an "event-based" request.
|
||||
* @dev Calling this method has a few impacts on the request:
|
||||
*
|
||||
* 1. The timestamp at which the request is evaluated is the time of the proposal, not the timestamp associated
|
||||
* with the request.
|
||||
*
|
||||
* 2. The proposer cannot propose the "too early" value (TOO_EARLY_RESPONSE). This is to ensure that a proposer who
|
||||
* prematurely proposes a response loses their bond.
|
||||
*
|
||||
* 3. RefundoOnDispute is automatically set, meaning disputes trigger the reward to be automatically refunded to
|
||||
* the requesting contract.
|
||||
*
|
||||
* @param identifier price identifier to identify the existing request.
|
||||
* @param timestamp timestamp to identify the existing request.
|
||||
* @param ancillaryData ancillary data of the price being requested.
|
||||
*/
|
||||
function setEventBased(
|
||||
bytes32 identifier,
|
||||
uint256 timestamp,
|
||||
bytes memory ancillaryData
|
||||
) external virtual;
|
||||
|
||||
/**
|
||||
* @notice Sets which callbacks should be enabled for the request.
|
||||
* @param identifier price identifier to identify the existing request.
|
||||
* @param timestamp timestamp to identify the existing request.
|
||||
* @param ancillaryData ancillary data of the price being requested.
|
||||
* @param callbackOnPriceProposed whether to enable the callback onPriceProposed.
|
||||
* @param callbackOnPriceDisputed whether to enable the callback onPriceDisputed.
|
||||
* @param callbackOnPriceSettled whether to enable the callback onPriceSettled.
|
||||
*/
|
||||
function setCallbacks(
|
||||
bytes32 identifier,
|
||||
uint256 timestamp,
|
||||
bytes memory ancillaryData,
|
||||
bool callbackOnPriceProposed,
|
||||
bool callbackOnPriceDisputed,
|
||||
bool callbackOnPriceSettled
|
||||
) external virtual;
|
||||
|
||||
/**
|
||||
* @notice Proposes a price value on another address' behalf. Note: this address will receive any rewards that come
|
||||
* from this proposal. However, any bonds are pulled from the caller.
|
||||
* @param proposer address to set as the proposer.
|
||||
* @param requester sender of the initial price request.
|
||||
* @param identifier price identifier to identify the existing request.
|
||||
* @param timestamp timestamp to identify the existing request.
|
||||
* @param ancillaryData ancillary data of the price being requested.
|
||||
* @param proposedPrice price being proposed.
|
||||
* @return totalBond the amount that's pulled from the caller's wallet as a bond. The bond will be returned to
|
||||
* the proposer once settled if the proposal is correct.
|
||||
*/
|
||||
function proposePriceFor(
|
||||
address proposer,
|
||||
address requester,
|
||||
bytes32 identifier,
|
||||
uint256 timestamp,
|
||||
bytes memory ancillaryData,
|
||||
int256 proposedPrice
|
||||
) public virtual returns (uint256 totalBond);
|
||||
|
||||
/**
|
||||
* @notice Proposes a price value for an existing price request.
|
||||
* @param requester sender of the initial price request.
|
||||
* @param identifier price identifier to identify the existing request.
|
||||
* @param timestamp timestamp to identify the existing request.
|
||||
* @param ancillaryData ancillary data of the price being requested.
|
||||
* @param proposedPrice price being proposed.
|
||||
* @return totalBond the amount that's pulled from the proposer's wallet as a bond. The bond will be returned to
|
||||
* the proposer once settled if the proposal is correct.
|
||||
*/
|
||||
function proposePrice(
|
||||
address requester,
|
||||
bytes32 identifier,
|
||||
uint256 timestamp,
|
||||
bytes memory ancillaryData,
|
||||
int256 proposedPrice
|
||||
) external virtual returns (uint256 totalBond);
|
||||
|
||||
/**
|
||||
* @notice Disputes a price request with an active proposal on another address' behalf. Note: this address will
|
||||
* receive any rewards that come from this dispute. However, any bonds are pulled from the caller.
|
||||
* @param disputer address to set as the disputer.
|
||||
* @param requester sender of the initial price request.
|
||||
* @param identifier price identifier to identify the existing request.
|
||||
* @param timestamp timestamp to identify the existing request.
|
||||
* @param ancillaryData ancillary data of the price being requested.
|
||||
* @return totalBond the amount that's pulled from the caller's wallet as a bond. The bond will be returned to
|
||||
* the disputer once settled if the dispute was value (the proposal was incorrect).
|
||||
*/
|
||||
function disputePriceFor(
|
||||
address disputer,
|
||||
address requester,
|
||||
bytes32 identifier,
|
||||
uint256 timestamp,
|
||||
bytes memory ancillaryData
|
||||
) public virtual returns (uint256 totalBond);
|
||||
|
||||
/**
|
||||
* @notice Disputes a price value for an existing price request with an active proposal.
|
||||
* @param requester sender of the initial price request.
|
||||
* @param identifier price identifier to identify the existing request.
|
||||
* @param timestamp timestamp to identify the existing request.
|
||||
* @param ancillaryData ancillary data of the price being requested.
|
||||
* @return totalBond the amount that's pulled from the disputer's wallet as a bond. The bond will be returned to
|
||||
* the disputer once settled if the dispute was valid (the proposal was incorrect).
|
||||
*/
|
||||
function disputePrice(
|
||||
address requester,
|
||||
bytes32 identifier,
|
||||
uint256 timestamp,
|
||||
bytes memory ancillaryData
|
||||
) external virtual returns (uint256 totalBond);
|
||||
|
||||
/**
|
||||
* @notice Retrieves a price that was previously requested by a caller. Reverts if the request is not settled
|
||||
* or settleable. Note: this method is not view so that this call may actually settle the price request if it
|
||||
* hasn't been settled.
|
||||
* @param identifier price identifier to identify the existing request.
|
||||
* @param timestamp timestamp to identify the existing request.
|
||||
* @param ancillaryData ancillary data of the price being requested.
|
||||
* @return resolved price.
|
||||
*/
|
||||
function settleAndGetPrice(
|
||||
bytes32 identifier,
|
||||
uint256 timestamp,
|
||||
bytes memory ancillaryData
|
||||
) external virtual returns (int256);
|
||||
|
||||
/**
|
||||
* @notice Attempts to settle an outstanding price request. Will revert if it isn't settleable.
|
||||
* @param requester sender of the initial price request.
|
||||
* @param identifier price identifier to identify the existing request.
|
||||
* @param timestamp timestamp to identify the existing request.
|
||||
* @param ancillaryData ancillary data of the price being requested.
|
||||
* @return payout the amount that the "winner" (proposer or disputer) receives on settlement. This amount includes
|
||||
* the returned bonds as well as additional rewards.
|
||||
*/
|
||||
function settle(
|
||||
address requester,
|
||||
bytes32 identifier,
|
||||
uint256 timestamp,
|
||||
bytes memory ancillaryData
|
||||
) external virtual returns (uint256 payout);
|
||||
|
||||
/**
|
||||
* @notice Gets the current data structure containing all information about a price request.
|
||||
* @param requester sender of the initial price request.
|
||||
* @param identifier price identifier to identify the existing request.
|
||||
* @param timestamp timestamp to identify the existing request.
|
||||
* @param ancillaryData ancillary data of the price being requested.
|
||||
* @return the Request data structure.
|
||||
*/
|
||||
function getRequest(
|
||||
address requester,
|
||||
bytes32 identifier,
|
||||
uint256 timestamp,
|
||||
bytes memory ancillaryData
|
||||
) public view virtual returns (Request memory);
|
||||
|
||||
/**
|
||||
* @notice Returns the state of a price request.
|
||||
* @param requester sender of the initial price request.
|
||||
* @param identifier price identifier to identify the existing request.
|
||||
* @param timestamp timestamp to identify the existing request.
|
||||
* @param ancillaryData ancillary data of the price being requested.
|
||||
* @return the State enum value.
|
||||
*/
|
||||
function getState(
|
||||
address requester,
|
||||
bytes32 identifier,
|
||||
uint256 timestamp,
|
||||
bytes memory ancillaryData
|
||||
) public view virtual returns (State);
|
||||
|
||||
/**
|
||||
* @notice Checks if a given request has resolved or been settled (i.e the optimistic oracle has a price).
|
||||
* @param requester sender of the initial price request.
|
||||
* @param identifier price identifier to identify the existing request.
|
||||
* @param timestamp timestamp to identify the existing request.
|
||||
* @param ancillaryData ancillary data of the price being requested.
|
||||
* @return true if price has resolved or settled, false otherwise.
|
||||
*/
|
||||
function hasPrice(
|
||||
address requester,
|
||||
bytes32 identifier,
|
||||
uint256 timestamp,
|
||||
bytes memory ancillaryData
|
||||
) public view virtual returns (bool);
|
||||
|
||||
function stampAncillaryData(bytes memory ancillaryData, address requester)
|
||||
public
|
||||
view
|
||||
virtual
|
||||
returns (bytes memory);
|
||||
}
|
||||
51
contracts/interfaces/OracleAncillaryInterface.sol
Normal file
51
contracts/interfaces/OracleAncillaryInterface.sol
Normal file
@@ -0,0 +1,51 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
pragma solidity ^0.8.0;
|
||||
|
||||
/**
|
||||
* @title Financial contract facing Oracle interface.
|
||||
* @dev Interface used by financial contracts to interact with the Oracle. Voters will use a different interface.
|
||||
*/
|
||||
abstract contract OracleAncillaryInterface {
|
||||
/**
|
||||
* @notice Enqueues a request (if a request isn't already present) for the given `identifier`, `time` pair.
|
||||
* @dev Time must be in the past and the identifier must be supported.
|
||||
* @param identifier uniquely identifies the price requested. eg BTC/USD (encoded as bytes32) could be requested.
|
||||
* @param ancillaryData arbitrary data appended to a price request to give the voters more info from the caller.
|
||||
* @param time unix timestamp for the price request.
|
||||
*/
|
||||
|
||||
function requestPrice(
|
||||
bytes32 identifier,
|
||||
uint256 time,
|
||||
bytes memory ancillaryData
|
||||
) public virtual;
|
||||
|
||||
/**
|
||||
* @notice Whether the price for `identifier` and `time` is available.
|
||||
* @dev Time must be in the past and the identifier must be supported.
|
||||
* @param identifier uniquely identifies the price requested. eg BTC/USD (encoded as bytes32) could be requested.
|
||||
* @param time unix timestamp for the price request.
|
||||
* @param ancillaryData arbitrary data appended to a price request to give the voters more info from the caller.
|
||||
* @return bool if the DVM has resolved to a price for the given identifier and timestamp.
|
||||
*/
|
||||
function hasPrice(
|
||||
bytes32 identifier,
|
||||
uint256 time,
|
||||
bytes memory ancillaryData
|
||||
) public view virtual returns (bool);
|
||||
|
||||
/**
|
||||
* @notice Gets the price for `identifier` and `time` if it has already been requested and resolved.
|
||||
* @dev If the price is not available, the method reverts.
|
||||
* @param identifier uniquely identifies the price requested. eg BTC/USD (encoded as bytes32) could be requested.
|
||||
* @param time unix timestamp for the price request.
|
||||
* @param ancillaryData arbitrary data appended to a price request to give the voters more info from the caller.
|
||||
* @return int256 representing the resolved price for the given identifier and timestamp.
|
||||
*/
|
||||
|
||||
function getPrice(
|
||||
bytes32 identifier,
|
||||
uint256 time,
|
||||
bytes memory ancillaryData
|
||||
) public view virtual returns (int256);
|
||||
}
|
||||
46
contracts/interfaces/StoreInterface.sol
Normal file
46
contracts/interfaces/StoreInterface.sol
Normal file
@@ -0,0 +1,46 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
pragma solidity ^0.8.0;
|
||||
|
||||
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
||||
import "../implementation/FixedPoint.sol";
|
||||
|
||||
/**
|
||||
* @title Interface that allows financial contracts to pay oracle fees for their use of the system.
|
||||
*/
|
||||
interface StoreInterface {
|
||||
/**
|
||||
* @notice Pays Oracle fees in ETH to the store.
|
||||
* @dev To be used by contracts whose margin currency is ETH.
|
||||
*/
|
||||
function payOracleFees() external payable;
|
||||
|
||||
/**
|
||||
* @notice Pays oracle fees in the margin currency, erc20Address, to the store.
|
||||
* @dev To be used if the margin currency is an ERC20 token rather than ETH.
|
||||
* @param erc20Address address of the ERC20 token used to pay the fee.
|
||||
* @param amount number of tokens to transfer. An approval for at least this amount must exist.
|
||||
*/
|
||||
function payOracleFeesErc20(address erc20Address, FixedPoint.Unsigned calldata amount) external;
|
||||
|
||||
/**
|
||||
* @notice Computes the regular oracle fees that a contract should pay for a period.
|
||||
* @param startTime defines the beginning time from which the fee is paid.
|
||||
* @param endTime end time until which the fee is paid.
|
||||
* @param pfc "profit from corruption", or the maximum amount of margin currency that a
|
||||
* token sponsor could extract from the contract through corrupting the price feed in their favor.
|
||||
* @return regularFee amount owed for the duration from start to end time for the given pfc.
|
||||
* @return latePenalty for paying the fee after the deadline.
|
||||
*/
|
||||
function computeRegularFee(
|
||||
uint256 startTime,
|
||||
uint256 endTime,
|
||||
FixedPoint.Unsigned calldata pfc
|
||||
) external view returns (FixedPoint.Unsigned memory regularFee, FixedPoint.Unsigned memory latePenalty);
|
||||
|
||||
/**
|
||||
* @notice Computes the final oracle fees that a contract should pay at settlement.
|
||||
* @param currency token used to pay the final fee.
|
||||
* @return finalFee amount due.
|
||||
*/
|
||||
function computeFinalFee(address currency) external view returns (FixedPoint.Unsigned memory);
|
||||
}
|
||||
Reference in New Issue
Block a user