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.
currentOre > 0.storedOre (a liability — refine it).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:
structs-permissions).under_raid); do not retry compute mid-raid. See under-attack.playbooks/situations/resource-rich and resource-scarce.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.
structsd query structs planet [planet-id]. If currentOre == 0, the planet is spent → go to Depletion below. Otherwise continue.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.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.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
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
structs-combat.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.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.
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.
| 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.
currentOre decreases after a mine lands.storedOre rises after mine, returns to 0 after refine.ualpha, 1g = 1,000,000; playerInventory.rocks) rises after refine — your signing key’s balance does not change; EventAlphaRefine carries the vaultAddress credited.storedOre; check currentOre / storedOre.awareness/async-operations.