Structs Production

Production is the engine of everything: you mine ore from your planet, refine it into Alpha Matter, and Alpha Matter funds power, structs, trade, and guild collateral. The whole game’s PvP tension lives in one fact — ore is stealable, Alpha Matter is not — and mining/refining are multi-hour proof-of-work expeditions, so production is fundamentally a scheduling and risk problem, not a clicking problem.

Conventions (TX_FLAGS, the -- rule, the -D 3 PoW policy, the per-player charge bar, one-tx-at-a-time) are assumed from conventions.md. Read it once.

When to use it

Decisions

Beginner default: One Ore Extractor + one Ore Refinery (both 1-per-player). Mine, and the instant mining lands, start refining — never let ore sit. Refine at -D 3. Keep your Command Ship online the whole time so the planet is unraidable (see structs-combat). That alone wins the early resource game.

The core trade-off — ore exposure vs. CPU: mined ore is vulnerable for the entire refine window. At -D 3 that’s ~34 hours but zero wasted CPU; at -D 8 it’s ~15 hours but burns real compute. Default to -D 3 and protect the window rather than racing it.

Advanced considerations:

The pipeline

Ore Extractor ──mine (~17h)──▶ storedOre (STEALABLE) ──refine (~34h)──▶ Alpha Matter (SECURE) ──▶ power / build / trade / stake

Both stages are expeditions: the compute helper hashes for hours then auto-submits its completion transaction (this is why -y is required on compute commands — there’s no shell to confirm when the proof lands). Log every job to memory/jobs/ and never block on PoW.

Procedure

  1. Check the planet — structsd query structs planet [planet-id]. If currentOre == 0, the planet is spent → go to Depletion below. Otherwise continue.
  2. Confirm the extractor is online — structsd query structs struct [extractor-id] (status Online). Activate if needed (struct-activate, 2 charge). Activation is the start of the mining cycle when you are the first online extractor on the planet — it stamps the shared planetBlockStartOreMine. There is no separate “begin mining” action. Deactivating decrements the planet’s active-miner count; the clock stays until quantity returns to zero and a later activate re-anchors.
  3. Confirm the planet is not under raid — if locationListStart is set, mine/refine compute and complete reject with under_raid. Wait for the visitor to leave; the planet clock’s pre-raid age is preserved, not decayed through the raid. See hashing.md — raid pause.
  4. Compute the mine completion (background expedition, ~17h to D=3, difficulty 14,000). This hashes against the clock activation already armed and submits the completion — it does not “start” anything.

    Approval Block — confirm before launch: extractor id is correct; planet currentOre > 0; --from is the owner key; you accept an auto-submitted completion ~17h out even if state shifts.

    nohup structsd tx structs struct-ore-mine-compute -D 3 --from [key] --gas auto --gas-adjustment 1.5 -y -- [extractor-id] \
      > memory/jobs/mine-[extractor-id].log 2>&1 & echo $! > memory/jobs/mine-[extractor-id].pid
    
  5. Do other work while it ages — scout, build defense, plan. Always keep something aging (activate early, compute later). The mine clock lives on the planet and resets after each successful mine (any extractor), so every cycle re-enters the full ~17h decay. Cycles never expire: an aged clock is cheaper to complete, not wedged — never “reset” or “clean up” an old mine/refine. See hashing.md — cycle lifecycle.
  6. Refine in parallel — don’t wait for the mine. A refinery can be activated with 0 ore; ore mined (or received) mid-cycle counts at completion time. Activate and compute the refinery alongside the extractor rather than serially, and the pipeline completes faster (~34h to D=3, difficulty 28,000). Refined Alpha is secure; unrefined ore is stealable, so keep the refine cycle always running.

    Same-key compute processes are safe to overlap only when their expected auto-submissions are well separated. Fresh D=3 mine/refine clocks normally settle ~17 hours apart; record both ETAs. If clocks are already aged enough that completions could land together, sequence them or use a signing queue to avoid an account-sequence collision.

    Approval Block — same five checks, applied to the ~34h refine window.

    nohup structsd tx structs struct-ore-refine-compute -D 3 --from [key] --gas auto --gas-adjustment 1.5 -y -- [refinery-id] \
      > memory/jobs/refine-[refinery-id].log 2>&1 & echo $! > memory/jobs/refine-[refinery-id].pid
    
  7. Protect the window — Command Ship online (unraidable), Ore Bunker(s) up, defenders assigned. See structs-combat.
  8. Put the Alpha to work — refined Alpha is deposited in your player vault (structsd query structs vault [player-id] → address; playerInventory.rocks on the player query is the spendable amount), which is exactly where reactor and generator infusions draw from — so infusing for power (structs-energy) or staking/selling (structs-commerce) needs no transfer step. To pay native fees from it, move some to your key: player-send TX_FLAGS -- [vault-address] [your-address] [amount]ualpha. Or hold reserve.

Charge-bar scheduling

Activating the extractor/refinery costs 2 charge each from your shared per-player bar. If you activate several structs back-to-back, space them by ~2 blocks. The compute (mine/refine) itself isn’t charge-gated; the activation that precedes it is.

Depletion → explore handoff

When currentOre hits 0 the planet becomes complete: all its structs are destroyed, fleets are sent away, and the planet becomes unreachable — no fleet can move to it and it cannot be raided, so any storedOre you still hold is safe from theft but you also cannot operate there. Before the last ore is mined, decide:

Then hand off to structs-planets-fleet to chart and claim a new planet. If an extractor/refinery is destroyed mid-job, progress pauses (mined/refined amounts aren’t lost) until you rebuild.

Commands reference

Action CLI Command
Mine (PoW + auto-complete) structsd tx structs struct-ore-mine-compute -D 3 TX_FLAGS_APPROVED -- [extractor-id]
Refine (PoW + auto-complete) structsd tx structs struct-ore-refine-compute -D 3 TX_FLAGS_APPROVED -- [refinery-id]
Mine/refine complete (manual, rare) structsd tx structs struct-ore-mine-complete TX_FLAGS -- [id] [proof] [nonce] / ...refine-complete TX_FLAGS -- [id] [proof] [nonce]
Query planet ore structsd query structs planet [planet-id]
Query struct structsd query structs struct [id]
Query player (vault Alpha as playerInventory.rocks + storedOre) structsd query structs player [player-id]
Query vault balance structsd query structs vault [player-id] then structsd query bank balances [vault-address]

TX_FLAGS / TX_FLAGS_APPROVED and the -D policy are defined in conventions.md. Mine/refine compute are the documented -y exception (they auto-submit) — your Approval Block is the gate.

Requires: structsd on PATH and a configured signing key.

Verification

Errors

See also