pragma solidity ^0.5.0; import "@openzeppelin/contracts/math/SafeMath.sol"; import "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; import "@openzeppelin/contracts/ownership/Ownable.sol"; import "@openzeppelin/contracts/lifecycle/Pausable.sol"; contract IInvoker { event Invocation(address invokeAddress, bytes32 invokeDataHash, address kTokenAddress, uint256 tokenAmount); event Reward(uint256 poolReward, uint256 platformReward, address tokenAddress); function invoke(address invokeAddress, bytes calldata invokeData, address kTokenAddress, uint256 tokenAmount) external payable; function calculatePoolReward(uint256 tokenAmount) internal view returns (uint256); function calculatePlatformReward(uint256 tokenAmount) internal view returns (uint256); function calculateExpectedBalance(uint256 startingBalance, uint256 tokenAmount) internal view returns (uint256); function poolReward() external view returns (uint256); function platformReward() external view returns (uint256); /* Helper hook for invoked transaction */ function currentTokenAmount() external view returns (uint256); function currentExpectedBalance() external view returns (uint256); function currentKTokenAddress() external view returns (address); function currentTokenAddress() external view returns (address); /* ADMIN FUNCTIONS */ function registerKToken(address kTokenAddress) external; function setPoolReward(uint256 poolRewardBips) external; function setPlatformReward(uint256 platformRewardBips) external; function setPlatformVaultAddress(address platformVaultAddress) external; }