Automate Your On-Chain Game Loops
Everything You Need for On-Chain Automation
A complete protocol for decentralized, permissioned, and cost-efficient smart contract automation.
Decentralized Loop Execution
Off-chain workers automatically detect when your contract is ready and execute game loops. No centralized servers, no single points of failure.
Built-in Verifiable Randomness
Native ECVRF proof generation and on-chain verification. Provably fair randomness on every tick for dice rolls, loot drops, and more — without external oracles.
Hybrid VRF — Randomness When You Need It
Standard-cost ticks with VRF only when your contract requests it. Your game decides when randomness matters — loot drops, critical hits, spawns — and pays VRF gas only on those ticks.
Fee-on-Execution Model
Pay only when loops actually run. Gas reimbursement plus a small base fee split between protocol and controllers. Transparent and predictable.
Developer Friendly
Simple functions, direct hooks. Sample contracts included.
Multi-Network Ready
Deploy on Ethereum mainnet, Sepolia testnet, or local Anvil for development. Configurable per-network with automatic deployment tooling.
Permissioned & Secure
Role-based access control ensures only registered controllers can trigger loops. On-chain VRF verification prevents manipulation.
Up and Running in 4 Steps
From contract to automated game loop in minutes, not months.
Inherit
Extend one of three base contracts:
- •AutoLoopCompatible — pure automation
- •AutoLoopHybridVRFCompatible — selective randomness (loot, crits, spawns)
- •AutoLoopVRFCompatible — randomness on every tick
Implement
Add shouldProgressLoop() to signal readiness and progressLoop() to execute your game logic.
Register & Fund
Register your contract on-chain and deposit ETH to cover gas and fees.
Let It Run
Workers automatically detect and execute your loops. Sit back and watch your game come alive.
Games for Pennies
Three tiers of on-chain automation — from pure execution to full VRF on every tick. Here's what each costs at current gas prices.
| Experience | Ticks/min | Std /min | Hybrid /min | VRF /min |
|---|---|---|---|---|
| 🕹Idle / passive game | 1 | $0.0080 | $0.0094 | $0.022 |
| ♟Turn-based strategy | 6 | $0.048 | $0.056 | $0.132 |
| 🎯Casual real-time | 30 | $0.240 | $0.282 | $0.660 |
1 tick/sec = 60 ticks/min. Most on-chain games run at 1–10 ticks/sec.
| Session | Ticks/min | Duration | Total cost |
|---|---|---|---|
| Idle game (1 hr) | 1 | 60 min | $0.480 |
| Turn-based match | 6 | 15 min | $0.720 |
| Casual real-time | 30 | 5 min | $1.20 |
| Hybrid strategy | 6 | 15 min | $0.846 |
| VRF card game | 6 | 10 min | $1.32 |
Based on ~0.05 gwei gas price and ETH at ~$2,000. Actual costs vary with network conditions.
Fee Breakdown
Simple by Design
Integrate Autoloop with just two functions. Here's a complete working contract.
1// SPDX-License-Identifier: MIT2pragma solidity ^0.8.13;34// Import the base contract that makes any5// contract compatible with AutoLoop workers6import {AutoLoopCompatible} from7 "autoloop/AutoLoopCompatible.sol";89// A simple demo: number goes up every interval10contract NumberGoUp is AutoLoopCompatible {11 uint256 public number;12 uint256 public interval;13 uint256 public lastTimeStamp;14 uint256 private _loopID;1516 constructor(uint256 _interval) {17 interval = _interval;18 lastTimeStamp = block.timestamp;19 }2021 // Workers call this every block to check22 // if the contract is ready for an update23 function shouldProgressLoop()24 external view override25 returns (26 bool loopIsReady,27 bytes memory progressWithData28 )29 {30 // Ready when enough time has passed31 loopIsReady =32 (block.timestamp - lastTimeStamp) > interval;33 // Pass loop ID to prevent duplicate runs34 progressWithData = abi.encode(_loopID);35 }3637 // Called by AutoLoop when shouldProgressLoop38 // returns true — this is your update logic39 function progressLoop(40 bytes calldata progressWithData41 ) external override {42 uint256 loopID =43 abi.decode(progressWithData, (uint256));44 // Guard against stale or replayed calls45 require(loopID == _loopID, "stale loop");46 lastTimeStamp = block.timestamp;47 ++number;48 ++_loopID;49 }50}See How We Compare to Chainlink
Three automation modes — Standard, Hybrid VRF, and Full VRF — all in one protocol. No separate subscriptions. Cheaper than Chainlink in every tier.