Port Ownership¶
Players and teams can acquire stations to earn passive income, secure supply priority, and shape regional economic flow. Three acquisition paths exist: direct purchase, economic takeover, and military takeover. Ownership turns a station from a neutral fixture into a configurable revenue engine — the owner sets tariffs, services, and defense, and absorbs the consequences when those choices conflict with traffic and reputation.
Status overall: 🚧 Partial. The Station.ownership JSONB field exists in the schema; the tariff lever and economic-takeover engine are implemented, while revenue streams are partial and the upgrade catalog is 📐 Design-only.
Overview¶
A station, once owned, behaves as a small business with its own treasury, balance sheet, and policy levers:
- Revenue flows in from tariffs, docking fees, services, storage rental, and information sales.
- Expenses flow out as maintenance, wages, defense upkeep, and upgrade upkeep.
- Owners withdraw the surplus on a configurable schedule.
- Rivals can attempt to wrest control through three competing acquisition paths.
Most stations in core Federation space are not for sale; ownership is concentrated in border, frontier, and lawless regions. See ./trading.md for the underlying station classes and pricing model that the tariff system layers on top of.
Acquisition¶
Status: 🚧 Partial — schema records ownership; the purchase, economic-takeover, and military-takeover workflows are implemented (port_ownership_service.py declare/siege/occupy); the upgrade catalog and revenue streams remain partial.
Purchase ✅ Shipped¶
Direct buy from the controlling faction. The faction lists the station at a price set by:
| Factor | Effect on price |
|---|---|
| Station class | Class 0/4/5 not for sale; Class 1–3 cheap; Class 8–11 expensive |
| Region | Frontier discounts, core-adjacent premium |
| Trailing revenue | Higher recent transaction volume → higher ask |
| Existing upgrades | Each upgrade adds its remaining capital value |
| Treasury balance | Transfers to the buyer; included in the headline price |
Range: 250,000 – 2,000,000 cr. Faction reputation gate varies by region; "Trusted" or higher with the controlling faction is the typical floor. Purchase is reputation-neutral with the seller (it is a sanctioned transaction) and reputation-positive in small amounts elsewhere (the new owner is a known entity).
A 24-hour grace window applies once the faction approves the buyer; the buyer must complete payment in that window or the listing reopens. Multiple qualified buyers within the same window trigger a sealed-bid auction resolved by the faction at the close of the window.
Listing surfaces in the station's public profile and in faction-bulletin endpoints; no off-market sales.
Economic takeover ✅ Shipped¶
A slow, reputation-neutral path. The challenger must:
- Account for >50% of the station's monthly transaction volume for 3 consecutive months, and
- Maintain hostile pricing pressure — undercut the station's spread or run trade contracts that bleed inventory — across the whole window.
When both conditions hold, the controlling faction triggers a forced sale at fair value:
fair_value_base = (90_day_rolling_avg_monthly_revenue) × 12 // 12× monthly = ~1-year payback
A condition multiplier penalises poorly-maintained stations:
condition_multiplier =
1.0
− 0.10 × max(0, 7 − days_since_last_defense_incident) / 7
− 0.15 × (1 if security_level == 'none' else 0)
Recent defense incidents (within 7 days) reduce value by up to 10%; an undefended station incurs a flat 15% haircut. Final price is bounded:
final_value = clamp(
fair_value_base × condition_multiplier,
floor = acquisition_cost, // can't force-sell below the original buy-in
ceiling = acquisition_cost × 2.0 // no tariff-spike inflation
)
The current owner has 7 days to counter by:
- Accepting the buyout at
final_value, or - Matching the challenger's market share for one full month (which resets the 3-month clock to zero), or
- Lodging a dispute within 3 days (e.g. "challenger is bot-farming volume artificially") that escalates to faction arbitration. Disputes must resolve before day 7 closes; an upheld dispute voids the takeover, a rejected dispute lets the timer run out.
On day 7 with no counter and no upheld dispute, credits equal to final_value transfer from the buyer's wallet to a faction-held escrow; the faction confirms the sale, the prior owner's wallet receives the proceeds (after deducting any outstanding station debts), and ownership flips atomically.
Volume is measured monthly on a rolling basis; any month where the challenger drops below 50% breaks the streak. Coordinated economic takeover by a team is allowed: the team's combined volume counts toward the threshold provided the team has a registered trade pact (filed publicly with the controlling faction).
Military takeover ✅ Shipped¶
Hostile and reputation-costly. The challenger:
- Files a declaration of intent with the controlling faction (24-hour real-time notice broadcast galaxy-wide).
- Conducts a siege during which the station's defenders (drones, patrol ships, garrison) must be defeated. Sector defense rules apply — see
../galaxy/sectors.md. - Occupies the station once defenders are eliminated.
A successful military takeover incurs a severe reputation penalty with the prior owner's faction and a smaller penalty with allied factions. Restricted to frontier and lawless regions; core Federation space has standing garrisons that make military takeover impractical. Military Contract upgrades (see Upgrades) confer immunity for their duration.
After capture, a stabilization period applies:
- 7-day post-takeover protection — the new owner is immune from a counter-takeover.
- 3 days of -50% productivity — defenders' damage and operational disruption suppress traffic and service capacity.
- Treasury seizure — the prior owner's treasury balance does not transfer to the attacker; it is forfeited to the controlling faction as a war-tax.
Multiple military takeover attempts by the same player on the same station face diminishing returns: each subsequent attempt within 90 days raises the defender garrison strength by 25%.
Ownership types¶
Status: 📐 Design-only across the board.
Solo¶
A single player owns 100%. Full unilateral control over pricing, tariffs, upgrades, and withdrawals. All revenue and all expenses flow to one wallet.
Team-owned¶
Registered to a Team (see ../gameplay/factions-and-teams.md). Role-based control:
- LEADER + OFFICER roles configure pricing, tariffs, upgrades, and withdrawal schedule.
- Members receive a revenue share configured at the team level.
- Treasury is held by the team, not an individual player.
Loss of team membership ends share entitlement. Disbanding the team triggers a forced sale to the controlling faction at fair value.
Syndicate¶
Up to 10 co-owners with weighted voting. Each owner holds a stake from 1–99%, totalling 100%. Mechanics:
- Revenue distributes proportionally to stake on each treasury sweep.
- Policy votes resolve by stake-weighted vote per the threshold table below.
- Stake transfers require approval of stake holders representing >50% of remaining stake.
- Disputes that fail to reach majority for 14 days escalate to faction arbitration: the faction picks the option closest to its own policy preferences.
Vote thresholds¶
| Vote type | Threshold | Veto right | Window |
|---|---|---|---|
| Tariff change | 50% stake | None | 72 h |
| Major upgrade (capex > 500k cr) | 50% stake | Any holder >25% can veto | 72 h |
| Sale of station | 66% stake | Any holder >25% can veto | 96 h |
| Withdrawal-schedule change | 50% stake | None | 72 h |
Quorum: ≥ 50% of total stake must be represented (voting or registered absent). Inactive owners (no login ≥ 30 days) have their voting power halved (50% of stake counted).
Tiebreak: if no majority emerges within the window, the highest single stakeholder's position wins. Ties at the top break randomly.
Veto enforcement: any holder >25% can lodge a stake-weighted veto on sale or major-upgrade votes. Veto blocks the action unless overridden by a 75% supermajority of voting stake explicitly against the veto.
Vote endpoint: POST /api/v1/stations/{id}/governance/vote with {vote_type, proposed_value, voter_stake_pct, position}. Vote weight is locked at vote-open time — no stake-buying mid-window.
Revenue streams¶
Status: 🚧 Partial.
| Stream | Range | Configurable | Notes |
|---|---|---|---|
| Trade tariff | 2–8% per transaction | Yes | Levied on every player buy/sell at the station. Lower attracts traffic, higher extracts more per trade. See tariff impact below. |
| Docking fee | 50–500 cr per docking | Yes (toggle + amount) | Flat charge. Discourages casual traffic; useful at high-traffic transit stations. |
| Service charges | 0.8× – 2.0× standard | Yes | Repair, refueling, drone manufacture, refining. 1.0× is baseline; 0.8× is a loss-leader for traffic; 2.0× is premium pricing for captive markets. |
| Storage rental | 1,000–10,000 cr/day per slot | Yes | Players rent station hangar slots for cargo storage. Slot count gated by Extended Storage upgrade. |
| Information sales | 100–1,000 cr per query | Yes (toggle + tier) | Owner can sell market intelligence — recent trade volume, price trends, top traders — to other players. Requires Market Intelligence upgrade. |
| Price adjustment lever | ±10% over base | Yes | Owner can nudge buy and sell prices within a ±10% band over the standard supply/demand formula. Applied after base pricing, before reputation/rank modifiers. Tightening the band attracts traders (lower sell, higher buy); widening extracts more per-trade margin (higher sell, lower buy) at the cost of traffic. Stored as Station.ownership.price_adjustment_pct. |
All revenue accrues into the station treasury (see Treasury & cash flow), not directly to the owner's wallet.
Tariff impact¶
Tariffs are the largest revenue lever and the largest traffic risk. The elasticity model:
demand_factor = max( min(1.0 - 0.05 × tariff_pct, 1.0), 0.10 )
A 2% tariff yields demand_factor = 0.90 (90% of base traffic); 5% yields 0.75; 8% yields 0.60; 15%+ floors at 0.10. The floor prevents owners from gaming the formula by spiking tariffs to artificially halt traffic during a takeover defense.
Reputation composes on top:
traffic_with_rep = base_traffic × demand_factor × (1 + 0.10 × reputation_score)
reputation_score ∈ [-1, +1] derived from the station's faction-rep drift (see Reputation impact below). A station with deeply negative reputation (-1) loses an additional 10% on top of tariff elasticity; a pristine reputation gains 10%.
Regional tax composes last (per AU3-10):
traffic_final = traffic_with_rep × (1 - region.tax_rate)
region.tax_rate ∈ [0.0, 0.25].
Per-day owner revenue projection (planning view shown in the owner dashboard):
expected_revenue_per_day =
traffic_final
× per_trade_revenue_avg
× (1 - region.tax_rate)
× (owner_pct / 100)
Worked example: 60 trades/day after elasticity, 1,000 cr average trade, 5% region tax, 30% owner cut → 60 × 1,000 × 0.95 × 0.30 = 17,100 cr/day to the owner.
Implications, holding base traffic at 100 transactions/day:
| Tariff | demand_factor | Traffic | Per-trade rev (avg 1,000 cr) | Daily revenue (gross) |
|---|---|---|---|---|
| 2% | 0.90 | 90 | 20 cr | 1,800 cr |
| 4% | 0.80 | 80 | 40 cr | 3,200 cr |
| 5% | 0.75 | 75 | 50 cr | 3,750 cr |
| 6% | 0.70 | 70 | 60 cr | 4,200 cr |
| 7% | 0.65 | 65 | 70 cr | 4,550 cr |
| 8% | 0.60 | 60 | 80 cr | 4,800 cr |
The table understates the long-run effect: at 7–8% tariffs, players actively route around the station, reputation erodes, and the controlling faction begins to favour rivals — so the headline daily figure decays month over month as reputation_score slides negative.
Practical guidance:
- 2% tariff — near-baseline traffic, modest revenue.
- 4–5% tariff — sweet spot for most owners; per-trade revenue more than compensates for the traffic drop.
- 7–8% tariff — predatory; traffic collapses, reputation erodes, neighbours become more attractive.
NPC traders apply the same elasticity. The owner cannot exempt themselves from their own tariff (this prevents tariff-arbitrage between owner-controlled and competitor stations). Team and syndicate co-owners are also subject to the tariff. See ./trading.md for how tariff stacks on top of the base spread.
Fee distribution¶
Every credit of station revenue (tariff + docking fee + service charge + storage rental + information sale) flows into three buckets per the canonical split from ./station-protection.md:
| Bucket | Default | Floor | Ceiling | Purpose |
|---|---|---|---|---|
| Defense fund | 40% | 30% | 60% | Drone replenishment, hired guards, tractor upkeep, barracks ops |
| Owner cut | 30% | 10% | 50% | Owner withdrawal or team treasury |
| Operating | 30% | 30% | 30% | Maintenance, wages, faction obligations (immutable) |
Owner-tunable bounds: the owner may rebalance defense and owner buckets within their bounds; operating is fixed at 30%. POST /api/v1/stations/{id}/fee-distribution/update validates:
defense_pct ∈ [0.30, 0.60]
owner_pct ∈ [0.10, 0.50]
operating_pct = 0.30 // immutable
defense_pct + owner_pct + operating_pct = 1.0
Defense underfunding cascade: if defense_pct < 0.35 (i.e. defense bucket under 35% of revenue), a per-day accounting tick monitors Station.defense_budget. After 3 consecutive days of negative defense balance, the station auto-downgrades by one security tier (see ./station-protection.md for the tier model). The owner receives a warning notification on day 1 of deficit; on day 3 the downgrade executes and broadcasts to faction allies.
Upgrades¶
Status: 📐 Design-only.
Each upgrade has a one-time capital cost and a recurring monthly upkeep equal to 5–10% of capital cost. Upkeep is paid from the station treasury; if the treasury cannot cover upkeep, the upgrade goes dormant until paid.
1. Extended Storage 📐¶
- Cost: 100,000 cr · Upkeep: 5%/mo
- Effect: +50% commodity inventory cap. Smooths supply shocks, enables stockpiling for arbitrage windows, unlocks more storage-rental slots.
- ROI: Pays back through reduced stockout frequency and rental income; ~6–12 months at moderate traffic.
2. Market Intelligence 📐¶
- Cost: 200,000 cr · Upkeep: 5%/mo
- Effect: +10% trade volume from informed players (subscribers) and unlocks the Information sales revenue stream.
- ROI: Volume bump alone pays in ~6 months at moderate traffic; information sales accelerate.
3. Automated Trading 📐¶
- Cost: 500,000 cr · Upkeep: 8%/mo
- Effect: Reduces NPC trader friction at the station, +20% volume.
- ROI: Strong at high-throughput border stations; weak at low-traffic frontier outposts.
4. Shipyard 📐¶
- Cost: 1,000,000 cr · Upkeep: 10%/mo
- Effect: Enables ship repair and minor construction at the station; opens a new revenue stream from repair/build contracts.
- ROI: Gates the highest-value service tier; needs traffic to justify upkeep.
5. Refining Facility 📐¶
- Cost: 750,000 cr · Upkeep: 8%/mo
- Effect: Converts raw ore into refined equipment at premium prices. Adds a vertical stage to the station's commodity flow.
- ROI: Strong at Class 1/3/6 stations adjacent to ore-producing regions.
6. Luxury Amenities 📐¶
- Cost: 300,000 cr · Upkeep: 7%/mo
- Effect: Attracts wealthy traders, +30% luxury_goods volume specifically. Marginal effect on other commodities.
- ROI: Best paired with Class 10/11 stations.
7. Automated Defense Grid 📐¶
- Cost: 500,000 cr · Upkeep: 6%/mo
- Effect: +50% defense effectiveness. Stacks with sector defense rules — see
../galaxy/sectors.md. - ROI: Defensive; pays back by deterring takeover attempts and reducing pirate incident losses.
8. Security Patrol 📐¶
- Cost: No capital cost; 200,000 cr/month upkeep
- Effect: Deters pirates in adjacent sectors; prevents incident-related revenue loss (typically 5–15% of monthly revenue at frontier stations).
- ROI: Net positive only at stations with non-trivial pirate exposure.
9. Military Contract 📐¶
- Cost: 1,000,000 cr (one-time, binds for 3 months) · Upkeep: included in capital cost
- Effect: Binds a Faction garrison to the station; immune to military takeover for the contract's duration. Renewable.
- ROI: Insurance, not income. Worth it for high-value or contested stations.
Operating costs¶
Status: 📐 Design-only.
| Cost | Rate | Notes |
|---|---|---|
| Maintenance | 1% of acquisition cost / month | Anchored on the original acquisition cost, not current market value, so successful upgrades and tariff swings don't retroactively raise the base bill. Pro-rated daily and deducted on the same tick that fees and tariffs accrue. Drawn from the operating bucket. On station sale (economic takeover, syndicate disbandment), the buyer's acquisition_cost resets to the new sale price for forward maintenance — no maintenance arbitrage by flipping ownership. |
| Wages | Scales with services offered | Each active service tier (repair, refuel, refining, shipyard) adds a wage line. |
| Defense upkeep | Drone replenishment + patrol-ship retainers | Scales with defense intensity; combat events spike the line. Drawn from the defense bucket of the fee distribution. |
| Upgrade upkeep | 5–10% of upgrade capital cost / month | Per-upgrade, summed. |
The station treasury must cover all four lines monthly. Persistent shortfall triggers insolvency (see Treasury & cash flow).
Defense system¶
Status: 📐 Design-only.
Owners configure defense policy independently of sector defense, layered on top of it. Policy levers:
Related — docked-ship protection is a distinct concern covered in
./station-protection.md: theStation.security_leveltier system (none/basic/standard/premium), hiredSTATION_SECURITYguard NPCs, the anti-theft tractor beam that locks stolen ships at undock, docking-fee economics (40/30/30 defense/owner/operating split), and the docked-ship-attack-shield rule. The defense levers in this section govern outward station defense against siege and sector-level threats; station-protection governs inward docked-ship safety. Both pull from the same revenue pool.
- Docking access list — open / faction-restricted / personal whitelist / hostile-deny.
- Punitive fees — surcharges for players on the owner's hostility list (up to 5× standard service rate).
- Defender posture — passive (defend on attack) / active (engage hostile-flagged ships in nearby sectors) / aggressive (engage non-faction ships within range).
- Drone allocation — share of the station's drone manufacturing output committed to local defense vs. resale.
- Patrol radius — 0–3 sectors; wider radius costs more in defense upkeep.
Sector defense rules at ../galaxy/sectors.md govern what owner-controlled drones and patrol ships can actually do in surrounding space; the station policy adds the station-specific overlay. Aggressive postures in faction-patrolled space provoke faction response and accelerate negative reputation drift.
A player visiting a hostile-owned station may be denied docking outright or charged punitive fees; both states are visible in the station's public profile so the visitor knows before approach. Denial-of-docking does not block emergency-fuel rescue per the standard galaxy rule.
Takeover defense¶
Status: 📐 Design-only.
Economic defense¶
- Counter-trade — place buy/sell orders at the station that absorb the takeover-attempt's volume, preventing the challenger from clearing the >50%-of-volume threshold.
- Friendly trade contract — bind a friendly faction or team to a contracted volume share; counts toward the owner's defense of the threshold.
- Tariff cut — temporarily lower the tariff to attract competing traffic and dilute the challenger's share.
Military defense¶
- Drones — stocked from the station's drone manufacturing capacity.
- Defense grid — the Automated Defense Grid upgrade.
- Garrison — the Military Contract upgrade (full immunity for 3 months).
- Allied response — team or syndicate co-owners can rally; faction allies may intervene if reputation is high enough.
Treasury & cash flow¶
Status: 🚧 Partial.
Station treasury¶
A per-station credit balance. All revenue flows in; all expenses flow out. Treasury balance is visible to owners only.
Owner withdrawals¶
Configurable schedule: daily, weekly, or monthly. On each sweep:
- Treasury must retain at least 10% of its current balance as operating cushion.
- Up to 90% of the balance flows to the owner (or, for teams/syndicates, distributes per share).
- The owner can also pull manual ad-hoc withdrawals subject to the same 90% cap.
Cash-injection¶
Owners can inject personal credits into the treasury at any time. Injections do not count as revenue and are recoverable on a future sweep, subject to the 90% withdrawal cap. For syndicates, a stake-weighted vote can compel proportional injection during a defense or insolvency event.
Insolvency¶
If the treasury cannot cover monthly expenses for 3 consecutive months, the station auto-sells to the controlling faction at depreciated value (typically 40–60% of acquisition cost). Proceeds clear outstanding debts first, then distribute to owners.
Insolvency stops all upgrades, reverts service charges to baseline, and broadcasts the sale 7 days in advance — giving the owner a final window to inject cash or accept rescue offers from rivals. Rescue offers from rivals override the auto-sale path: any rival offer at or above the depreciated price (and approved by the controlling faction) takes precedence.
Worked example¶
A Class 2 border station, acquisition cost 800,000 cr, with Extended Storage and Market Intelligence upgrades:
| Line | Monthly amount |
|---|---|
| Trade tariff (4%, ~3,000 trades/mo) | +120,000 cr |
| Docking fees | +15,000 cr |
| Service charges | +25,000 cr |
| Information sales | +8,000 cr |
| Revenue total | +168,000 cr |
| Maintenance (1% of 800k) | -8,000 cr |
| Wages | -12,000 cr |
| Defense upkeep | -6,000 cr |
| Upgrade upkeep (5% of 100k + 5% of 200k) | -15,000 cr |
| Expense total | -41,000 cr |
| Net to treasury | +127,000 cr |
At a monthly sweep with the 10% reserve rule, ~114,000 cr flows to the owner each month — payback on the 800k acquisition in roughly 7 months, before factoring further upgrades or tariff changes.
Reputation impact¶
Status: 📐 Design-only.
Owning a station shifts the owner's reputation with the controlling faction over time:
| Tariff range | Faction rep drift |
|---|---|
| 2–4% | Neutral to slight positive |
| 5–6% | Neutral |
| 7–8% | Slow negative |
Predatory pricing on services (1.8×–2.0×) compounds the negative drift. Information sales are reputation-neutral with the faction but can damage relationships with players whose data is being sold.
Other rep effects:
- Fair operation for 6+ months at tariffs ≤4% accrues a small permanent reputation bonus with the controlling faction, recognised in faction-bulletin endpoints.
- Insolvency incurs a moderate reputation penalty — a failed station is a failed local employer.
- Military takeover of a station from another faction imposes the severe penalty noted in Acquisition; the new owner inherits the controlling faction's stance, which is hostile and recovers slowly.
- Refusing a forced sale at the close of a successful economic takeover is not legally possible (the faction executes the transfer); reputation is unaffected.
Co-ownership lifecycle¶
Status: 📐 Design-only.
Forming a syndicate¶
A solo owner can convert to a syndicate by issuing share invitations totalling up to 99% of stake. Each invitee accepts or declines within 7 days; on acceptance, the original owner's stake is reduced by the accepted amount. Conversion fees: a one-time 1% of acquisition cost paid from the treasury.
Adding members to a team¶
A team-owned station inherits the team's roster automatically; new joiners gain the configured member share from the next sweep. Officer promotion within the team grants configuration access to the station without a separate invitation.
Dissolving co-ownership¶
Three paths:
- Buyout — one stake-holder buys out all others at fair value, reverting to solo ownership.
- Sale — stake-weighted vote sells the whole station to a third party or back to the controlling faction.
- Disbandment — vote dissolves the syndicate; station auto-sells to the controlling faction at depreciated value, proceeds distributed by stake.
Inactive owners (no login for 30 days) have their stake voting power reduced by 50%; after 90 days inactive, their stake is forfeit to the controlling faction and rebalanced among active owners.
Source map¶
Target paths in Sectorwars2102:
| Subsystem | Target file |
|---|---|
| Station ownership model | services/gameserver/src/models/station_ownership.py |
| Tariff & revenue service | services/gameserver/src/services/station_revenue_service.py |
| Takeover engine (economic + military) | services/gameserver/src/services/station_takeover_service.py |
| Upgrade catalog | services/gameserver/src/core/station_upgrades.py |
The existing Station.ownership JSONB field on models/station.py records the current owner and stake distribution; the services and catalog above are 📐 Design-only.
Related¶
./trading.md— main trading flow, station classes, base pricing model that tariff layers on../contracts.md— owners can issue station-based delivery contracts.../galaxy/sectors.md— sector defense mechanics that station defense layers on.../gameplay/factions-and-teams.md— team-owned and syndicate ownership structures.