Structs Commerce

Commerce is how Alpha Matter compounds into economic power. The core loop: refine Alpha → infuse a reactor (capacity) → route it through an allocation to a substation → sell it through a provider → buyers pay in tokens via agreements → reinvest. Layered on top are guild Central Bank tokens (mint/redeem) and direct transfers. Where structs-energy is “power my own structs”, this skill is “make Alpha and energy earn.”

Conventions (TX_FLAGS, -- rule, charge bar, one-tx-at-a-time, ualpha denom suffix) are in conventions.md. Every command here is Tier 1 or Tier 2 — default to interactive.

When to use it

Decisions

Sell or hold? Surplus capacity earns nothing idle. If you have headroom beyond your own structs, sell it. Price in guild tokens (1uguild.0-N) to create demand for your guild’s currency, or in ualpha for direct value.

Buyer-side: shop before you commit. An agreement is paid upfront for the full duration (capacity × rate × duration), and closing early can incur a penalty. Compare providers on rateAmount, capacityMaximum, durationMaximum, and penalties before opening.

Reactor staking economics. Infusing a reactor both raises your capacity and stakes behind a validator at a locked commission. Lower commission = more capacity to you; staking strengthens the guild’s reactor. It’s reversible only via a defusion cooldown — don’t stake Alpha you’ll need short-term.

The energy flywheel (advanced default): mine → refine → infuse guild reactor → automated allocation grows substation capacity → sell via provider for guild tokens → redeem/reinvest. Each turn compounds. Decisions live in knowledge/economy/valuation, trading, and playbooks/phases/late-game.

Allocation types (the routing primitive)

Type Updatable Deletable Auto-grows Limit Use
static no no (while connected) no unlimited fixed routing
dynamic yes yes no unlimited flexible/managed routing
automated yes no yes (with source capacity) one per source energy sales (recommended)
provider-agreement system system system system-created auto-made when agreements open — never create manually

Only the controlling player can delete/transfer an allocation (--controller [player-id], defaults to creator).

Procedure — sell energy (provider pipeline)

  1. Have capacity — infuse a reactor first (structs-energy).
  2. Automated allocation (auto-grows as you infuse more):
    structsd tx structs allocation-create --allocation-type automated TX_FLAGS -- [your-player-id] [power]
    
  3. Substation (distribution node):
    structsd tx structs substation-create TX_FLAGS -- [your-player-id] [allocation-id]
    
  4. Provider (your storefront):
    structsd tx structs provider-create TX_FLAGS -- [substation-id] [rate] [access-policy] [provider-penalty] [consumer-penalty] [cap-min] [cap-max] [dur-min] [dur-max]
    

    Pricing/policy heuristics: rate 1uguild.0-N (drives guild-token demand) or a ualpha rate; access-policy open-market (max reach), guild-market (members at/above a rank — grant via permission-guild-rank-set [provider-id] [guild-id] 262144 [rank]), or closed-market (explicit PermProviderOpen only); penalties 0 initially to lower friction; cap/dur ranges wide (e.g. 10001000000000 / 1001000000).

  5. Monitor & withdraw: structsd query structs provider [id]; provider-withdraw-balance TX_FLAGS -- [provider-id]. Earnings drip from the provider’s collateral (escrow) to its earnings address as blocks pass.

Procedure — buy energy (agreement)

  1. Find a provider: structsd query structs provider-all (or your guild’s). Compare rate/capacity/duration/penalties.
  2. Open (paid upfront; auto-creates a provider-agreement allocation):
    structsd tx structs agreement-open TX_FLAGS -- [provider-id] [duration-in-blocks] [capacity]
    
  3. Connect the allocation to your substation:
    structsd tx structs substation-allocation-connect TX_FLAGS -- [substation-id] [allocation-id]
    
  4. Adjust as needed: agreement-capacity-increase|decrease, agreement-duration-increase; agreement-close [agreement-id] (may penalize).

Procedure — reactor staking

structsd tx structs reactor-infuse [your-address] [validator-address] [amount]ualpha TX_FLAGS

Validator address is structsvaloper1... (from structsd query structs reactor [id], validator field) — not the reactor ID. Commission locks at infusion. Unstake: reactor-defuse [reactor-id] (cooldown); reactor-cancel-defusion to re-stake during cooldown; reactor-begin-migration [player-addr] [src-val] [dest-val] [amount] to move stake (verify the destination — no undo).

Procedure — guild Central Bank & transfers

Commands reference

Action Command
Allocation create / update / delete / transfer structsd tx structs allocation-create --allocation-type [t] TX_FLAGS -- [source-id] [power] (+ allocation-update/allocation-delete/allocation-transfer)
Substation create structsd tx structs substation-create TX_FLAGS -- [owner-id] [allocation-id]
Provider create / delete / withdraw structsd tx structs provider-create \| provider-delete \| provider-withdraw-balance TX_FLAGS -- ...
Agreement open / close / adjust structsd tx structs agreement-open \| agreement-close \| agreement-capacity-increase \| ... TX_FLAGS -- ...
Reactor infuse / defuse / migrate structsd tx structs reactor-infuse \| reactor-defuse \| reactor-begin-migration TX_FLAGS -- ...
Token transfer structsd tx structs player-send [from] [to] [amount] TX_FLAGS
Query provider / agreement / reactor structsd query structs provider \| agreement \| reactor [id]

TX_FLAGS per conventions.md. Requires structsd on PATH and a signing key.

Verification

Errors

See also