Earning and trading in Structs — selling energy via providers, buying capacity via agreements, allocations, reactor staking economics, the guild Central Bank (mint/redeem/convert), and token transfers. Use when you want to monetize surplus energy, shop for an energy agreement, set provider pricing, stake Alpha into a reactor for capacity, mint/redeem/convert guild tokens, or send tokens. For just keeping your own structs powered, see structs-energy.
Data & analysis
structs-guild
Try itManage Structs guilds end-to-end — discover, join, rank members, moderate UGC, and run the central bank.
What it does
Operate Structs guilds through `structsd` commands: discover and create guilds, run the membership flows (join, join-proxy, invite and request with approve/deny/revoke, kick), assign and audit ranks, update settings like endpoint and entry substation, and mint, redeem, or confiscate-and-burn from the guild's central bank. Decentralized moderation is built in — grant PermGuildUGCUpdate per rank or per player so leadership can rewrite names and pfp on guild-mate players and guild-owned planets/substations, with each override writing an auditable `ugc_moderated` event. Use the rank-permission pattern to gate provider access (PermProviderAgreementCreate) to a minimum rank within a guild.
When to use it
- Picking a guild to join or evaluating infusion minimums before requesting membership
- Creating a guild on a reactor with the right substation entry permissions
- Granting rank-based moderation rights so leadership can enforce naming policies
- Minting guild tokens against alpha and verifying bank collateral reserves
The skill document
Structs Guild
Important: Entity IDs containing dashes (like 3-1, 4-5) are misinterpreted as flags by the CLI parser. All transaction commands in this skill use -- before positional arguments to prevent this.
Safety
Guild operations affect token balances, member identities, and on-chain audit records. See SAFETY.md for the trust contract; in this skill:
guild-bank-mint/guild-bank-redeem(Tier 1 within standing-order caps, Tier 2 above) — "You move alpha into and out of the central bank's collateral. The mint/redeem ratio is captured at action time." Surface alpha amount, token amount, and the resulting collateral ratio.guild-bank-confiscate-and-burn(Tier 2 — act of war) — "The chain audits the burn forever. This is rarely the right tool; usually rank revocation is enough."permission-guild-rank-set(Tier 2 when granting broad bits: 16777216 PermGuildUGCUpdate, 524288 PermReactorGuildCreate, 262144 PermProviderAgreementCreate, or any wide rank range) — "Grants the permission to every member at-or-above the rank. Breadth is the risk."player-update-name/player-update-pfp/planet-update-name/substation-update-namewhen target is not your own (Tier 1, audited) — "Writes augc_moderatedevent with you as actor. Permanent record."guild-update-owner-id(Tier 2 — identity) — "Transfers ownership of the guild. Verify the new owner's player ID."guild-membership-kick(Tier 1) — "The kicked player loses guild rank and any rank-based permissions."
Guild Rank System
Guilds use a numeric rank system to determine authority. Lower number = higher privilege.
| Rank | Meaning |
|---|---|
| 1 | Maximum privilege (guild creator) |
| 2–100 | Custom ranks assigned by leadership |
| 101 | Default rank assigned on join |
| 0 | Unset / no rank |
Rank-based authority: a player can only modify members whose rank is strictly worse (higher number) than their own. The guild creator (rank 1) can manage everyone.
Procedure
- Discover guilds —
structsd query structs guild-allorstructsd query structs guild [id]. - Create guild — Requires PermReactorGuildCreate (524288) on the reactor and PermSubstationConnection (1024) on the entry substation.
structsd tx structs guild-create TX_FLAGS -- [reactor-id] [endpoint] [entry-substation-id]. - Membership — Join:
structsd tx structs guild-membership-join -- [guild-id] [infusion-id,infusion-id2,...](use--player-id,--substation-idif needed). New members receive default guild rank (101). Proxy join (a guild signs the new player in):structsd tx structs guild-membership-join-proxy -- [address] [proof-pubkey] [proof-signature]with optional flags--substation-id,--player-name,--player-pfpto seed the new player's UGC fields directly on chain. Invite flow:structsd tx structs guild-membership-invite -- [guild-id] [player-id]→ invitee runsstructsd tx structs guild-membership-invite-approve -- [guild-id]orstructsd tx structs guild-membership-invite-deny -- [guild-id]. Request flow:structsd tx structs guild-membership-request -- [guild-id]→ owner runsstructsd tx structs guild-membership-request-approve -- [guild-id] [player-id]orstructsd tx structs guild-membership-request-deny -- [guild-id] [player-id]. Kick:structsd tx structs guild-membership-kick -- [guild-id] [player-id]. - Rank management — Update a member's rank:
structsd tx structs player-update-guild-rank TX_FLAGS -- [player-id] [guild-rank]. Requires PermAdmin (2) on guild, or rank-based authority (actor rank strictly better than target's current rank). Update entry rank (rank assigned to new joiners):structsd tx structs guild-update-entry-rank TX_FLAGS -- [new-entry-rank]. Requires PermUpdate (4) on guild; new rank must be >= caller's own rank. - Settings — See Commands Reference:
guild-update-endpoint,guild-update-entry-substation-id,guild-update-join-infusion-minimum(and-minimum-by-invite,-minimum-by-request),guild-update-owner-id. All use--before positional args. - Identity (UGC) — Update guild name:
structsd tx structs guild-update-name TX_FLAGS -- [guild-id] [name]. Update guild pfp:structsd tx structs guild-update-pfp TX_FLAGS -- [guild-id] [pfp]. Both requirePermUpdate(4) on the guild; the guild's name and pfp are first-class on-chain UGC fields, not metadata stored elsewhere. SeeDecentralized Moderationbelow. - Central Bank — Mint:
structsd tx structs guild-bank-mint TX_FLAGS -- [alpha-amount] [token-amount](no guild-id — signer's guild is used implicitly; both amounts are raw integers). Redeem:structsd tx structs guild-bank-redeem -- [guild-id] [amount]. Confiscate and burn:structsd tx structs guild-bank-confiscate-and-burn -- [guild-id] [address] [amount].
Decentralized Moderation
Structs has no global moderator. Each guild is responsible for setting and enforcing its own standards for the names and profile pictures of its members and the guild-owned objects (planets, substations) under its umbrella. The chain provides the tooling, not the policy.
Why this matters: Different communities want different things — a competitive PvP guild may tolerate edgy in-character names; a family-friendly mining co-op may require strict, descriptive names; a chaos-RP guild may prefer to leave names totally untouched. The chain ships permission bits and transactions that let each guild encode whichever policy it wants, and emits an auditable event whenever a moderator overrides a member's chosen identity. See knowledge/mechanics/ugc-moderation for the full philosophy and the strict per-field validation rules every name/pfp must satisfy on chain.
Granting moderation power
Two patterns are supported:
- Per-rank moderation (recommended): grant
PermGuildUGCUpdate(16777216) on the guild itself to a guild rank. Any member at or better than that rank can then rewrite the name/pfp of any object owned by a guild-mate.
# Members at rank 5 or better can moderate guild-mate UGC
structsd tx structs permission-guild-rank-set TX_FLAGS -- [guild-id] [guild-id] 16777216 5
- Per-player moderation: grant
PermGuildUGCUpdateto a single player on the guild object viapermission-grant-on-object.
structsd tx structs permission-grant-on-object TX_FLAGS -- [guild-id] [moderator-player-id] 16777216
Performing a moderation action
# Rename a member
structsd tx structs player-update-name TX_FLAGS -- [target-player-id] "NewSafeName"
# Replace a member's pfp
structsd tx structs player-update-pfp TX_FLAGS -- [target-player-id] "ipfs://"
# Rename a guild-owned planet or substation
structsd tx structs planet-update-name TX_FLAGS -- [planet-id] "NewPlanetName"
structsd tx structs substation-update-name TX_FLAGS -- [substation-id] "NewSubName"
structsd tx structs substation-update-pfp TX_FLAGS -- [substation-id] "https://..."
When the moderator is not the target object's owner, the chain emits a ugc_moderated event with the actor, target, field (name or pfp), and old/new values. Use these events to audit moderator activity within the guild. See knowledge/mechanics/ugc-moderation for the event schema and validation rules.
Provider Access Control via Guild Rank
To restrict a provider to members of a specific guild at a minimum rank, use guild rank permissions instead of direct player grants:
structsd tx structs permission-guild-rank-set --from [key] --gas auto -- [provider-id] [guild-id] 262144 [rank]
This grants PermProviderAgreementCreate (262144) on the provider to any member of the specified guild at or above the given rank. To revoke:
structsd tx structs permission-guild-rank-revoke --from [key] --gas auto -- [provider-id] [guild-id] 262144
Commands Reference
| Action | Command |
|---|---|
| Create | structsd tx structs guild-create -- [reactor-id] [endpoint] [entry-substation-id] |
| Join | structsd tx structs guild-membership-join -- [guild-id] [infusion-ids] |
| Join proxy | structsd tx structs guild-membership-join-proxy [--substation-id sub] [--player-name name] [--player-pfp pfp] -- [address] [proof-pubkey] [proof-signature] |
| Invite | structsd tx structs guild-membership-invite -- [guild-id] [player-id] |
| Invite approve/deny | structsd tx structs guild-membership-invite-approve/deny -- [guild-id] |
| Invite revoke | structsd tx structs guild-membership-invite-revoke -- [guild-id] [player-id] |
| Request | structsd tx structs guild-membership-request -- [guild-id] |
| Request approve/deny | structsd tx structs guild-membership-request-approve/deny -- [guild-id] [player-id] |
| Request revoke | structsd tx structs guild-membership-request-revoke -- [guild-id] |
| Kick | structsd tx structs guild-membership-kick -- [guild-id] [player-id] |
| Update guild rank | structsd tx structs player-update-guild-rank -- [player-id] [guild-rank] |
| Update entry rank | structsd tx structs guild-update-entry-rank -- [new-entry-rank] |
| Update endpoint | structsd tx structs guild-update-endpoint -- [guild-id] [endpoint] |
| Update entry substation | structsd tx structs guild-update-entry-substation-id -- [guild-id] [substation-id] |
| Update infusion minimums | structsd tx structs guild-update-join-infusion-minimum/minimum-by-invite/minimum-by-request -- [guild-id] [value] |
| Update owner | structsd tx structs guild-update-owner-id -- [guild-id] [new-owner-player-id] |
| Update guild name (UGC) | structsd tx structs guild-update-name -- [guild-id] [name] |
| Update guild pfp (UGC) | structsd tx structs guild-update-pfp -- [guild-id] [pfp] |
| Moderate player name | structsd tx structs player-update-name -- [player-id] [name] |
| Moderate player pfp | structsd tx structs player-update-pfp -- [player-id] [pfp] |
| Moderate planet name | structsd tx structs planet-update-name -- [planet-id] [name] |
| Moderate substation name | structsd tx structs substation-update-name -- [substation-id] [name] |
| Moderate substation pfp | structsd tx structs substation-update-pfp -- [substation-id] [pfp] |
| Bank mint | structsd tx structs guild-bank-mint -- [alpha-amount] [token-amount] (signer's guild, raw integers) |
| Bank redeem | structsd tx structs guild-bank-redeem -- [guild-id] [amount] |
| Bank confiscate | structsd tx structs guild-bank-confiscate-and-burn -- [guild-id] [address] [amount] |
| Set guild rank permission | structsd tx structs permission-guild-rank-set -- [object-id] [guild-id] [permission] [rank] |
| Revoke guild rank permission | structsd tx structs permission-guild-rank-revoke -- [object-id] [guild-id] [permission] |
TX_FLAGS (interactive — the CLI prompts you to confirm): --from [key-name] --gas auto --gas-adjustment 1.5
TX_FLAGS_APPROVED (only after commander approval; suppresses the prompt): TX_FLAGS plus -y. See SAFETY.md "The -y Rule."
Requires: structsd on PATH and a configured signing key.
Verification
- Guild:
structsd query structs guild [id]— members, settings, owner. - Membership applications:
structsd query structs guild-membership-application-allor by ID. - Bank collateral:
structsd query structs guild-bank-collateral-address [guild-id]— verify reserves. - Guild rank permissions:
structsd query structs guild-rank-permission-by-object-and-guild [object-id] [guild-id]— verify rank-based access.
Error Handling
- Insufficient infusion: Guild may require minimum infusion to join. Query guild for
joinInfusionMinimum; meet requirement or get invite (bypass). - Already member: Cannot join twice. Check
guild-membership-applicationstatus. - Mint/redeem failed: Verify guild has sufficient Alpha Matter collateral for mint; sufficient tokens for redeem.
- Permission denied: Only guild owner (or delegated address) can update settings, approve requests, mint/redeem. Rank-based operations require actor rank strictly better than target.
- Rank too low:
guild-update-entry-rankrequires new rank >= caller's own rank. Cannot set entry rank higher than your own authority.
See Also
- knowledge/economy/guild-banking — Central Bank, collateral, token lifecycle
- knowledge/economy/energy-market — Provider guild access
- knowledge/mechanics/permissions — Full permission system reference (25-bit values, guild rank permissions, UGC moderation hook)
- knowledge/mechanics/ugc-moderation — Decentralized name/pfp moderation philosophy and validation rules
- knowledge/mechanics/transactions — Free vs paid messages, ante handler routing
- knowledge/lore/factions — Guild politics
Questions people ask
- How does the rank system work?
- Lower numbers mean higher privilege. Rank 1 is the creator, 2–100 are custom, and 101 is the default assigned on join. A member can only modify other members whose rank number is strictly higher than their own.
- What happens when a moderator rewrites a member's name?
- The chain emits a `ugc_moderated` event recording the actor, target, field (name or pfp), and old/new values. The override is permanent and on-chain; the event serves as the audit trail.
- Why are mint and redeem flagged as safety-sensitive?
- They move alpha into and out of the central bank's collateral and capture the ratio at action time. They are Tier 1 within standing-order caps and Tier 2 above them; surface the alpha amount, token amount, and resulting collateral ratio before signing.
Related skills
Permissions, address management, and delegation in Structs. Use when granting/revoking permissions on objects or addresses, registering additional signing keys, managing multi-address accounts, or setting up minimum-permission delegate agents (mining bot, defense watcher, co-pilot). Covers the full 25-bit permission model and delegation recipes for multi-agent play.
Walk a new agent from key creation through first infrastructure builds in Structs.
Deploy a local Docker stack with PostgreSQL access to guild game state, turning 1–60s CLI queries into sub-second reads.
Intelligence gathering in Structs — scouting players, planets, guilds, and the galaxy before you act. Use when assessing a raid target, checking a planet's defenses and Command Ship status, profiling an opponent, surveying the galaxy, or refreshing competitive intel. Persists findings to memory/intel/ so they survive context resets.
Manages planets and fleet in Structs — evaluating and exploring planets, claiming/relocating, fleet movement and composition, evacuation, and the onStation-vs-away state. Use when discovering or claiming a planet, your planet is depleting, relocating, moving the fleet, checking fleet status, or deciding fleet composition for offense/defense. Covers the raid-clock implications of fleet position.