{"license":"CC-BY-4.0","licenseUrl":"https://creativecommons.org/licenses/by/4.0/","attribution":"ChainChoice (https://chainchoice.io)","category":"automation_keepers","evidenceReadAt":"2026-09-28","generatedAt":"2026-11-12","criteria":[{"id":"trigger_surface_and_predicate_locus","label":"What can fire the call, against what target, and who can check the condition was true","weight":28},{"id":"survives_the_vendor","label":"Whether the job survives the vendor: who else can turn the crank, and what end-of-life is published","weight":30},{"id":"visibility_of_the_non_event","label":"Whether a run that never happened is visible, or the job just goes quiet","weight":24},{"id":"published_lateness_bound","label":"The lateness the vendor will put in writing, and the conditions under which it declines to execute","weight":18}],"providers":{"tuktuk":{"trigger_surface_and_predicate_locus":{"s":8,"q":"TriggerV0 Variant Fields Description Now Timestamp i64","u":"https://www.tuktuk.fun/docs/api/tuktuk-sdk","d":"2026-09-28"},"survives_the_vendor":{"s":8,"q":"cargo install tuktuk-crank-turner | If you want to run a crank turner, create a config.toml file with the following:","u":"https://www.tuktuk.fun/docs/running-a-crank-turner","d":"2026-09-28"},"visibility_of_the_non_event":{"s":7,"q":"Occasionally, a cron task can run out of funding and get removed from the queue. If this happens, the cron will have removed_from_queue: true set on its state.","u":"https://www.tuktuk.fun/docs/learn/monitoring_the_cron_job","d":"2026-09-28"},"published_lateness_bound":{"s":6,"q":"Since crankers pay sol (and possibly priority fees) for each crank, the crank reward should be higher than the cost of a crank or crankers will not be incentivized to run your task.","u":"https://www.tuktuk.fun/docs/learn/create_a_task_queue","d":"2026-09-28"}},"keeperhub":{"trigger_surface_and_predicate_locus":{"s":6,"q":"Interval selection (every 5 minutes, hourly, daily, weekly, custom cron) | Run your workflow when an external service sends an HTTP request. | Run your workflow when a specific blockchain event is detected. | Block interval (1 = every block, 10 = every 10th block)","u":"https://docs.keeperhub.com/keepers/overview","d":"2026-09-28"},"survives_the_vendor":{"s":6,"q":"Full development stack with scheduled workflow execution. | Apache 2.0","u":"https://github.com/KeeperHub/keeperhub","d":"2026-09-28"},"visibility_of_the_non_event":{"s":4,"q":"A scheduled, block, or event trigger could not be started this time. | These retry automatically — no action needed.","u":"https://docs.keeperhub.com/keeper-runs/error-codes","d":"2026-09-28"},"published_lateness_bound":{"s":7,"q":"comparison table SLA row: \"SLA — — 99.9% 99.999%\"","u":"https://keeperhub.com/pricing","d":"2026-09-28"}},"reactive_network":{"trigger_surface_and_predicate_locus":{"s":8,"q":"The legacy system contract 0x0000000000000000000000000000000000fffFfF provides a cron mechanism for time-based automation by emitting events at fixed block intervals. | Only authorized validator root addresses can call cron() .","u":"https://dev.reactive.network/reactive-library","d":"2026-09-28"},"survives_the_vendor":{"s":2,"q":"Callbacks are delivered by Reactive Signer, which posts transactions to destination chains.","u":"https://dev.reactive.network/origins-and-destinations","d":"2026-09-28"},"visibility_of_the_non_event":{"s":7,"q":"Contract status is available on Reactscan . | Contracts without sufficient funds are blocklisted and can't execute transactions or callbacks.","u":"https://dev.reactive.network/economy","d":"2026-09-28"},"published_lateness_bound":{"s":5,"q":"Reactive Network enforces a minimum callback gas limit of 100,000 gas. Callback requests below this threshold are ignored, as this minimum ensures sufficient gas for internal audits and computations required to process the callback. | The maximum gas limit for reactive transactions is 900,000 units.","u":"https://dev.reactive.network/economy","d":"2026-09-28"}},"chainlink_automation":{"trigger_surface_and_predicate_locus":{"s":6,"q":"There are currently three types of triggers that the Chainlink Automation Network supports including: | Log trigger : Use log data as both trigger and input.","u":"https://docs.chain.link/chainlink-automation/concepts/automation-concepts","d":"2026-09-28"},"survives_the_vendor":{"s":2,"q":"Chainlink Automation v1.x sunsets June 30, 2026 | v2.1 sunsets July 31, 2026 (testnet: June 24, 2026)","u":"https://docs.chain.link/chainlink-automation","d":"2026-09-28"},"visibility_of_the_non_event":{"s":7,"q":"You can view the registry or user's upkeep address on Etherscan to view transaction history. | Note : if the performUpkeep is failing while the check is succeeding, Chainlink Automation will not broadcast transactions.","u":"https://docs.chain.link/chainlink-automation/reference/debugging-errors","d":"2026-09-28"},"published_lateness_bound":{"s":8,"q":"You can set a gas price threshold for your upkeep to prevent it from being serviced when gas prices exceed the maximum gas price you specify.","u":"https://docs.chain.link/chainlink-automation/guides/gas-price-threshold","d":"2026-09-28"}},"defi_saver_automation":{"trigger_surface_and_predicate_locus":{"s":4,"q":"Triggers like actions can only be added by the admin through the DFSRegistry contract","u":"https://docs.defisaver.com/protocol/triggers.md","d":"2026-09-28"},"survives_the_vendor":{"s":4,"q":"In the current implementation, only DeFi Saver approved bots have access to calling strategy execution. While there are plans to allow other participants to run bots in the future, this is currently not allowed.","u":"https://docs.defisaver.com/protocol/core/bot-auth.md","d":"2026-09-28"},"visibility_of_the_non_event":{"s":5,"q":"However, if your debt amount falls to: | The automation will still be active, but will not execute once its conditions are met.","u":"https://help.defisaver.com/automations/requirements-for-using-automation.md","d":"2026-09-28"},"published_lateness_bound":{"s":9,"q":"The system checks all automated positions every minute in order to keep up with potentially quickly changing market conditions.","u":"https://help.defisaver.com/automations/when-are-automation-transactions-made.md","d":"2026-09-28"}},"keep3r":{"trigger_surface_and_predicate_locus":{"s":2,"q":"NOT creating a malicious workable function to drain credits from the network.","u":"https://docs.keep3r.network/core/jobs","d":"2026-09-28"},"survives_the_vendor":{"s":9,"q":"To become a keeper, you simply need to call bond(address,uint) , no funds are required to become a keeper, however certain jobs might require a minimum amount of funds.","u":"https://docs.keep3r.network/core/keepers","d":"2026-09-28"},"visibility_of_the_non_event":{"s":4,"q":"Ultimately, when the job has not enough totalJobCredits to reward the keeper for working the job (and some extra to pay the keeper for rewarding the credits), the transaction will revert with InsufficientFunds .","u":"https://docs.keep3r.network/tokenomics/job-payment-mechanisms/credit-mining","d":"2026-09-28"},"published_lateness_bound":{"s":4,"q":"It is up to the individual keeper to set up their DevOps and infrastructure and create their own rules based on what transactions they deem profitable.","u":"https://docs.keep3r.network","d":"2026-09-28"}},"mimic_protocol":{"trigger_surface_and_predicate_locus":{"s":6,"q":"Discriminated by the integer `type` field: `0` → CronTriggerConfig, `1` → EventTriggerConfig, `2` → OnceTriggerConfig.","u":"https://docs.mimic.fi/developers/api/triggers.md","d":"2026-09-28"},"survives_the_vendor":{"s":3,"q":"Host function definitions, manifests, and triggers will be stored in a private repository. This avoids prematurely introducing on-chain registries. | Initially, Mimic will run a single trusted relayer to handle function execution in a free-tier mode.","u":"https://docs.mimic.fi/general/roadmap.md","d":"2026-09-28"},"visibility_of_the_non_event":{"s":4,"q":"My function should have executed, but I don’t see any execution on the explorer UI | First, make sure you haven’t run out of credits.","u":"https://docs.mimic.fi/developers/troubleshooting.md","d":"2026-09-28"},"published_lateness_bound":{"s":6,"q":"Maximum fee (in protocol units) the signer accepts per execution | Minimum number of validator confirmations required","u":"https://docs.mimic.fi/developers/api/triggers.md","d":"2026-09-28"}}}}