Core contracts:
AutomationRegistry.sol
struct Task {
address owner;
bytes conditionData;
bytes actionData;
uint256 createdAt;
bool active;
}
mapping(uint256 => Task) public tasks;
function registerTask(bytes calldata condition, bytes calldata action) external returns (uint256) {
uint256 taskId = nextTaskId++;
tasks[taskId] = Task(msg.sender, condition, action, block.timestamp, true);
emit TaskCreated(taskId, msg.sender);
return taskId;
}
StrategyExecutor.sol
function execute(uint256 taskId) external {
Task memory task = registry.getTask(taskId);
require(conditionChecker.check(task.conditionData), "Condition not met");
(bool ok, ) = address(this).call(task.actionData);
require(ok, "Execution failed");
emit TaskExecuted(taskId);
}
ConditionChecker.sol
function check(bytes calldata data) external view returns (bool) {
(uint256 currentPrice, uint256 triggerBelow) = abi.decode(data, (uint256, uint256));
return currentPrice < triggerBelow;
}
Last updated