Skip to content

Tasks overview

The Tasks page is the main work surface. It has two kinds of work:

  • Onchain task groups — build transactions across many wallets.
  • Social task groups — fan an off-chain HTTP/browser flow across many burner accounts.

A group has a kind (onchain or social) chosen at create time. You cannot mix the two kinds in one group; the + Build Task dialog branches off the group’s kind.

Anatomy of a group

ElementWhat it is
NameFree-form.
Kindonchain or social. Locked after creation.
Chain(Onchain only.) The target EVM chain.
Status pillsPer-row live state — Pending, Running, Completed, Failed.
Live logPer-row modal with the verbose execution trace.

When any row is Running, the table polls every 1 second so progress is live.

Anatomy of a row

For onchain rows: one row = one wallet × one task config. The runner signs with that wallet, broadcasts, and stamps the row.

For social rows: one row = one burner account × one module instance. The runner steps through the module’s request → captcha → verify pipeline.

Building tasks

Click + Build Task inside a group. The dialog adapts:

  • Onchain: contract address → ABI auto-fetch (Sourcify, ~300ms debounced) → function picker → arg fields (with {address} / {id} template tokens) → value → gas → wallet group → mode.
  • Social: pick a module or paste a Google Forms URL → account group → per-field overrides → save.

Saving creates one task row per wallet (onchain) or per account (social).

The runner

The runner owns task status end-to-end. Every exit path stamps a status:

  • Success → Completed, tx hash if onchain.
  • Failure → Failed, revert reason or HTTP error in LastError.
  • Mid-execution → Running with progress updates so the UI flashes the latest revert reason.

If you force-kill the app mid-run, surviving rows get demoted to Stopped on next launch. Re-Start to resume them.

Multi-wallet fan-out

You build the task once; the runner instantiates per wallet. Each wallet’s nonce is tracked independently. Failures don’t cascade — one wallet reverting doesn’t pause the rest.

For onchain: nonces are pre-fetched per task. EIP-1559 gas is computed once per task with a fresh tip baseline from the gas ticker.

For social: each account’s run is fully isolated (own browser profile, own proxy if pinned).

Multi-RPC under the hood

The runner picks RPC URLs through the RPC store with failover. The persistent client pool keeps one *ethclient.Client per URL with HTTP/2 + MaxIdleConnsPerHost: 32, so the broadcast doesn’t pay TLS handshake on each attempt.

Continue to: