Developers
Ship an automation once. Get paid every time it runs.
Modules are small, auditable specs — not arbitrary code. The keeper only ever calls what your manifest declares, and users only ever grant what it requests.
- Step 1
Describe
Write a manifest: one trigger, one allowlisted action, the exact selectors you call, and the permissions you need. Nothing implicit.
- Step 2
Simulate
Every module must pass eth_call simulation against Robinhood Chain before it can be published. Simulation output is stored with the version.
- Step 3
Publish
Versions are immutable. Installs pin to a version; users opt in to upgrades and see the permission diff before they accept.
- Step 4
Earn
Rewards follow independent installations and successful paid executions, weighted by reliability. Simulations and self-installs score zero.
The module manifest
Template variables resolve from the installer's configuration at execution time. Selectors that are not in the manifest are rejected by the keeper before simulation — a module cannot widen its own scope.
{
"slug": "fee-sweeper",
"name": "Fee Sweeper",
"category": "revenue",
"trigger": { "type": "balance", "token": "0x…", "threshold": "1000000000000000000" },
"action": {
"type": "contract_call",
"target": "0x…",
"signature": "sweep(address)",
"args": ["{{config.treasury}}"]
},
"permissions": [
{ "kind": "call:sweep(address)", "description": "Call sweep on the configured vault only." }
],
"execution": { "gasLimit": 180000, "maxRetries": 2 }
}