Skip to Content
TutorialsRun a MaintenanceHub bot

Run a MaintenanceHub bot (poke loop)

Where this fits: Protocol upkeep · Contract: Maintenance & Bots

Goal:

  • run permissionless upkeep safely and predictably
  • keep checkpoints, reward flushes, and marketplace automation moving

MaintenanceHub is designed so once its canonical wiring preflight passes, poke does not revert due to a single subcall failure.

Flow

Steps

1) Load contract addresses from the manifest

You need:

  • MaintenanceHub
  • MarketRouter
  • VeClaimNFT
  • ShareholderRoyalties

Tip: after poke(args) passes its canonical-bundle preflight, individual subcall errors are swallowed. If the immutable hub is stale or split-brain, poke(args) reverts before any sub-action so your bot can surface the wiring issue instead of silently maintaining the wrong bundle.

2) Read pause flags before you call

At minimum:

  • MineCore.takeoversPaused()
  • Furnace.lockingPaused()
  • MarketRouter.tradingPaused()

Policy:

  • If trading is paused, do not include offerIds for auto-Furnace execution, but keep calling poke({ offerIds: [], maxOffers: 0 }) for checkpoint/flush/tick upkeep.
  • If locking is paused, treat any slippage-dependent swaps as unsafe.
  • If poke(args) starts reverting with WiringMismatch, stop the loop, fix or redeploy the stale MaintenanceHub, and refresh your manifest before resuming.

3) Construct PokeArgs

Shape (ABI order matters):

  • offerIds: uint256[]
  • maxOffers: uint256 (clamped onchain)

Practical defaults:

  • maxOffers: 10–25

4) Run on a fixed cadence

Typical patterns:

  • every 1–5 minutes
  • or event-driven (new offerIds appended, then poke)

5) Observe outcomes via events

Index:

  • MaintenanceHub.Poked
  • downstream events (Market router auto-Furnace executed, flush, tick, etc)

What success looks like

  • poke calls succeed consistently and gas stays stable.
  • Your bot drops unsafe offer sweeps during pauses but keeps non-market upkeep moving.

See also