46 lines
2.0 KiB
Solidity
46 lines
2.0 KiB
Solidity
// 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);
|
|
} |