// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; // Pulled from https://github.com/gelatodigital/automate/blob/v2.1.0/contracts/integrations/AutomateTaskCreator.sol import "./AutomateReady.sol"; /** * @dev Inherit this contract to allow your smart contract * to be a task creator and create tasks. */ abstract contract AutomateTaskCreator is AutomateReady { using SafeERC20 for IERC20; /// @custom:oz-upgrades-unsafe-allow state-variable-immutable address public immutable fundsOwner; /// @custom:oz-upgrades-unsafe-allow state-variable-immutable ITaskTreasuryUpgradable public immutable taskTreasury; /// @custom:oz-upgrades-unsafe-allow constructor constructor(address _automate, address _fundsOwner) AutomateReady(_automate, address(this)) { fundsOwner = _fundsOwner; taskTreasury = automate.taskTreasury(); } /** * @dev * Withdraw funds from this contract's Gelato balance to fundsOwner. */ function withdrawFunds(uint256 _amount, address _token) external { require( msg.sender == fundsOwner, "Only funds owner can withdraw funds" ); taskTreasury.withdrawFunds(payable(fundsOwner), _token, _amount); } function _depositFunds(uint256 _amount, address _token) internal { uint256 ethValue = _token == ETH ? _amount : 0; taskTreasury.depositFunds{value: ethValue}( address(this), _token, _amount ); } function _createTask( address _execAddress, bytes memory _execDataOrSelector, ModuleData memory _moduleData, address _feeToken ) internal returns (bytes32) { return automate.createTask( _execAddress, _execDataOrSelector, _moduleData, _feeToken ); } function _cancelTask(bytes32 _taskId) internal { automate.cancelTask(_taskId); } function _resolverModuleArg( address _resolverAddress, bytes memory _resolverData ) internal pure returns (bytes memory) { return abi.encode(_resolverAddress, _resolverData); } function _timeModuleArg(uint256 _startTime, uint256 _interval) internal pure returns (bytes memory) { return abi.encode(uint128(_startTime), uint128(_interval)); } function _proxyModuleArg() internal pure returns (bytes memory) { return bytes(""); } function _singleExecModuleArg() internal pure returns (bytes memory) { return bytes(""); } }