Files
smom-dbis-138/contracts/reserve/GelatoKeeperCompatible.sol
2026-06-02 05:59:06 -07:00

55 lines
1.6 KiB
Solidity

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "./PriceFeedKeeper.sol";
/**
* @title GelatoKeeperCompatible
* @notice Gelato Network compatible keeper for PriceFeedKeeper
* @dev Implements Gelato's task execution pattern
*/
contract GelatoKeeperCompatible {
PriceFeedKeeper public immutable keeper;
address public immutable gelato;
event TaskExecuted(address indexed executor, address[] assets, uint256 timestamp);
constructor(address keeperAddress, address gelato_) {
keeper = PriceFeedKeeper(keeperAddress);
gelato = gelato_;
}
/**
* @notice Gelato task execution function
* @dev Called by Gelato executors
*/
function executeTask() external {
require(msg.sender == gelato, "GelatoKeeperCompatible: only Gelato");
(bool needsUpdate, address[] memory assets) = keeper.checkUpkeep();
if (needsUpdate && assets.length > 0) {
keeper.updateAssets(assets);
emit TaskExecuted(msg.sender, assets, block.timestamp);
}
}
/**
* @notice Check if task can be executed
* @return canExec True if task can be executed
* @return execData Encoded execution data
*/
function canExec() external view returns (bool canExec, bytes memory execData) {
(bool needsUpdate, address[] memory assets) = keeper.checkUpkeep();
if (needsUpdate && assets.length > 0) {
canExec = true;
execData = abi.encodeWithSelector(this.executeTask.selector);
} else {
canExec = false;
execData = "";
}
}
}