Economy Specifications

EW design, formulas, mechanics, and research framework for
Vak's Store — Vintage Story TOPS server

Published: 2025

This page is the detailed technical companion to the Whitepaper.
It assumes you have read the Whitepaper's summary sections first.

📖 Read the Whitepaper

Prices shown in worked examples are illustrative. Check the live price sheet for current values.

Table of Contents

1. What EW Is (and Is Not)
     1.1 Definition and scope
     1.2 What problems EW solves
     1.3 Intended use cases
   1.4 What EW is NOT
2. EW Issuance: How New EW Enters the Economy
     2.1 The only issuance mechanism
     2.2 Issuance formula
     2.3 Worked example — selling Steel Ingots
     2.4 What happens to stock
     2.5 Effect on EW supply
3. EW Destruction: How EW Leaves the Economy
     3.1 Sink 1 — Store purchases
     3.2 Sink 2 — OCM admin fee (10%)
     3.3 Sink 3 — Insurance metal withdrawal
     3.4 The dual-sink mechanism
     3.5 Worked example — net supply change over one day
4. Store Pricing Model
 4.1 Buy/sell spread
     4.2 Individual vs bundle pricing
     4.3 Algorithmic price adjustment
     4.4 Price locking at submission: the bulk trading incentive
5. EW Inflation and Deflation
 5.1 Why EW has both
     5.2 Price shock self-correction
     5.3 Why EW is more stable than RG
     5.4 Wealth concentration risk
   5.5 Comparison: EW vs RG vs informal commodity currencies
6. OCM Peg System
     6.1 What a peg is
     6.2 STORE mode
     6.3 HALF mode
     6.4 Multi-peg configuration
     6.5 selectedPegEW vs canonicalEW
     6.6 Item quantity rounding
     6.7 Fee calculation
     6.8 Worked example — STORE mode trade with Fat peg
7. Liquidity Guarantee and Metal Backing
     7.1 The liquidity guarantee
     7.2 Why the store's item value exceeds EW in circulation
     7.3 Metal backing and the insurance reserve
  7.4 Why low metal reserves do NOT mean EW has lost value
     7.5 Insurance: how EW converts to metals
     7.6 Insurance policy lifecycle (state machine)
8. Research Context: What This Economy Is Studying
     8.1 Research framing
     8.2 Research questions being studied
     8.3 Observable findings
     8.4 Limitations of the research
     8.5 Comparison to academic small-scale economy research
     8.6 What would falsify the EW model
9. Limitations
10. Full Transaction Type Reference
11. See Also

1. What EW Is (and Is Not)

1.1 Definition and scope

EW (Exchange Weight) is a ledger-based, non-physical unit of trade value. It has no in-game form in Vintage Story — it exists exclusively as a balance in the Vak's Store backend ledger (a Google Sheets database). EW cannot be transferred out of the TOPS server ecosystem and has no real-money value, ever.

The name "Exchange Weight" replaces the older name "BT" (Bartering Tokens) used in earlier documentation. The rename better reflects what the unit measures: the weight of an exchange, not a token of barter.

1.2 What problems EW solves

Problem 1 — Barter friction. Each barter trade required simultaneous agreement on quantity, price, meetup time, meetup location, and mutual trust. EW separates the sell-event from the buy-event: a player can sell items today, hold EW, and buy different items tomorrow — with no counterparty required at either moment.

Problem 2 — Rusty Gear (RG) inflation. RG is produced by mob farms with no economic cost, causing runaway devaluation over a wipe cycle. EW is only created when real items are exchanged with the store, tying the money supply to actual economic activity.

Problem 3 — Price opacity. Before EW, no public price reference existed. Experienced players exploited this to underpay newcomers. EW introduces a publicly posted buy/sell price sheet, public Price History charts, and the Bank Dashboard — giving every player the same information regardless of experience level.

1.3 Intended use cases

Primary: medium of exchange — facilitate trades between players.
Secondary: unit of account — compare item values across the economy.
NOT intended as: long-term savings vehicle, investment instrument, speculation target, or status symbol.

The recommendation is to spend roughly what you earn. Holding large idle balances concentrates wealth in a way that reduces the currency's effectiveness as a medium of exchange for the wider community. Holding a working balance for convenience, however, is accepted and common.

1.4 What EW is NOT

2. EW Issuance: How New EW Enters the Economy

2.1 The only issuance mechanism

New EW is created exclusively when a player sells items to the store. There is no other mechanism: no admin top-up, no faucet, no printing. Every unit of EW in circulation was issued in exchange for real in-game items physically delivered to the store.

2.2 Issuance formula

EWissued = Σi ( qtyi × buyPricePerUniti )

Where:

qtyi                  = quantity of item i (individual units, after bundle expansion)

buyPricePerUniti = store's buy price per individual unit for item i
                         (backend: buyPricePerUnit = stackBuyPrice / bundleSize)

Bundle expansion:

individual_units  = qty_stacks × bundleSize

pricePerUnit      = stackBuyPrice / bundleSize

2.3 Worked example — selling Steel Ingots

A player sells 4 stacks of Steel Ingots.
Current store buy price: 256 EW per stack. Stack size (bundleSize): 16.

pricePerUnit      = 256 / 16 = 16 EW per ingot
individual_units = 4 × 16  = 64 ingots
EWissued          = 64 × 16 = 1,024 EW credited to the player's account

Prices are illustrative. Check the live price sheet for current values.

2.4 What happens to stock

When a sell order is approved, the store's raw stock increases:

rawStock[item] += qty_stacks × bundleSize

The store receives items at the sell price (what it will charge buyers later), while it paid the seller at the buy price. This spread is the foundation of the liquidity guarantee (see Section 7.2).

2.5 Effect on EW supply

EWsupply_new = EWsupply_old + EWissued

This is an inflationary event — total EW in circulation increases.

3. EW Destruction: How EW Leaves the Economy

3.1 Sink 1 — Store purchases (player buys from store)

When a player buys items from the store, EW is deducted and removed from circulation permanently. It does not transfer to the store — it ceases to exist.

EWdestroyed_store = Σi ( qtyi × sellPricePerUniti )
EWsupply_new        = EWsupply_old − EWdestroyed_store
rawStock[item]        -= qty_stacks × bundleSize

3.2 Sink 2 — OCM admin fee (10% on admin-handled trades)

When the admin completes an OCM trade on behalf of a merchant, a 10% fee is charged on the canonical EW value of the trade:

feeEW = ceil( canonicalEW × 0.10 )

Backend note: canonicalEW is first rounded to 2 decimal places via round2_() before the fee is computed. Simplified here as ceil() for readability.

This feeEW is deducted from the merchant's balance and destroyed — it does not go to the admin or any other player. When a merchant self-services their trade (accepts and delivers personally), no fee is charged: feeEW = 0.

Cumulative effect: OCM fees act as a slow deflationary drain on EW supply.

3.3 Sink 3 — Insurance metal withdrawal (EW nullification)

When a player withdraws physical metals from an insurance policy instead of redeeming units back to EW, the EW allocated to that policy is nullified — destroyed rather than returned to circulation. This creates a natural price stabilizer for metals: when metal prices rise, players are incentivized to physically withdraw their reserves and sell the metals, increasing market supply and eventually bringing prices back down.

Effect on EW supply: decrease (EW permanently removed).

3.4 The dual-sink mechanism

Two independent sinks prevent unlimited supply growth:

Together they maintain a long-run equilibrium between issuance and destruction that is tied to real economic behavior, not a policy target.

3.5 Worked example — net supply change over one day

Store sell orders approved:  3 orders totalling +600 EW issued.
Store buy orders approved:   2 orders totalling −400 EW destroyed.
OCM admin fees collected:    5 trades × avg. 20 EW fee = −100 EW destroyed.

Net change: +600 − 400 − 100 = +100 EW
EWsupply_new = EWsupply_old + 100 EW

This day was mildly inflationary: more players sold to the store than bought from it, and OCM trading was active but not sufficient to offset issuance.

4. Store Pricing Model

4.1 Buy/sell spread

The store maintains a spread between what it pays sellers (buy price) and what it charges buyers (sell price):

spread = sellPrice − buyPrice    (always > 0)

This spread serves three purposes:

  1. It ensures the total item value in stock always exceeds total EW in circulation (liquidity guarantee — see Section 7.2).
  2. It incentivizes players to trade with each other through the OCM, where they can negotiate better rates than the store spread.
  3. It provides the store's long-term operational margin.

4.2 Individual vs bundle pricing

Items are priced per full stack (bundle). Per-unit pricing is derived:

buyPricePerUnit  = stackBuyPrice / bundleSize    (backend: round2_())
sellPricePerUnit = stackSellPrice / bundleSize

Stack totals: totalEW = qty_stacks × stackBuyPrice   (no per-unit rounding error)

4.3 Algorithmic price adjustment

Each item has a configured price range (minimum and maximum sell price) and a target stock level. The sell price adjusts automatically based on current stock relative to the target, and the buy price is then derived from the sell price via a margin multiplier:

fill_ratio       = currentStockStacks / targetStockStacks     (clamped to [0, 1])
sellPrice(item) = maxPrice − fill_ratio × (maxPrice − minPrice)
buyPrice(item)  = sellPrice(item) × margin

Where:

Constraint: minPrice must always be set to maxPrice × margin. This guarantees that even at maximum stock (fill_ratio = 1), the store never sells an item for less than it paid — i.e. buyPrice ≤ sellPrice always holds at every stock level.

At stock = 0 (empty): sellPrice = maxPrice (store charges the most; sellers earn the most).
At stock = target (full): sellPrice = minPrice = maxPrice × margin (store charges the least; sellers earn the least).
Between 0 and target: sell price is linearly interpolated. Buy price always tracks sell price × margin.

The admin sets the price range (min/max) and the margin per item. The price engine applies the adjustment automatically after each approved transaction — no manual intervention is required after each trade.

Worked example — Resin price at different stock levels.

Illustrative Resin configuration: maxPrice = 128 EW/stack, margin = 0.5, therefore minPrice = 128 × 0.5 = 64 EW/stack, targetStockStacks = 20.

Scenario A: Stock is 5 stacks of 20 (fill_ratio = 0.25)
sellPrice = 128 − 0.25 × (128 − 64) = 128 − 16 = 112 EW/stack
buyPrice  = 112 × 0.5                      = 56 EW/stack

Scenario B: Stock is 15 stacks of 20 (fill_ratio = 0.75)
sellPrice = 128 − 0.75 × (128 − 64) = 128 − 48 = 80 EW/stack
buyPrice  = 80 × 0.5                       = 40 EW/stack

As stock fills up, both prices fall proportionally. At full stock (fill_ratio = 1): sellPrice would reach minPrice = 64 EW and buyPrice would reach 64 × 0.5 = 32 EW — the store still earns its margin on every sale.

Numbers are illustrative. Current Resin prices will differ. Check the live price sheet.

4.4 Price locking at submission: the bulk trading incentive

When a player submits a trade request, the price is locked at the moment of submission — not at the moment of approval. This has an important consequence: large trades lock in a favorable price before the post-trade price adjustment takes effect.

After a big sell order is approved, the buy price drops (because stock increased). The seller already locked in the high price before that drop. The next seller gets less for the same goods. Similarly, a large buy order locks in a low price — after approval, sell prices rise (stock fell), but the buyer already secured the deal at the pre-adjustment rate.

This mechanism strongly incentivizes bulk trading: the first large trade in a cycle captures the best available price, and subsequent smaller trades operate at the adjusted (less favorable) rate. There is no explicit bulk discount — the incentive is structural, created by the price adjustment mechanics rather than a separate pricing tier.

5. EW Inflation and Deflation

5.1 Why EW has both

EW is not a fixed-supply or pegged currency. Its purchasing power relative to any individual item fluctuates with supply and demand for that item:

This is intentional: price signals direct player behavior, and player behavior is what creates the dynamic, self-correcting economy.

5.2 Price shock self-correction

If item X becomes expensive: players are incentivized to gather and produce more X → supply of X increases → price of X falls back toward equilibrium.

If item X becomes cheap (over-supplied): less incentive to gather X → supply naturally decreases → price rises back toward equilibrium.

The price adjustment system (Section 4.3) makes this self-correction automatic and near-instantaneous rather than requiring manual price reviews.

5.3 Why EW is more stable than RG

RG inflation is supply-driven: mob farms produce unlimited RG at zero economic cost, so the RG supply grows faster than demand regardless of player behavior. EW inflation is activity-driven: EW is only issued when a player sells real items. If no items are sold, no EW is created.

Key structural differences:

Important: EW is NOT perfectly stable. Its purchasing power relative to any specific item changes with market conditions. But the mechanism preventing runaway devaluation is structural — built into the issuance rules — not dependent on policy decisions or admin intervention.

5.4 Wealth concentration risk

The Bank Dashboard tracks wealth distribution daily across four bands: top 1%, next 9%, next 20%, and bottom 70% of active players by EW balance. Concentrated wealth means a small number of players control most of the trade capacity — a known risk in any economy of any size. Publishing this data openly is an intentional design choice: it allows the community to observe whether concentration is worsening over time and to respond.

5.5 Comparison: EW vs RG vs informal commodity currencies

Currency Supply mechanism Inflation risk Price reference Wealth transparency Accessibility
EW Item exchange only Low–Medium Public (daily) Public (daily) Very high
RG Mob farms / trading High None None High
Silver Mining only Low None None Medium
Gold Mining + rare Very Low None None Low
Silver and Gold are not designed as currencies in Vintage Story. They are included here because some players use them as informal mediums of exchange in the absence of EW. This comparison highlights the structural advantages of EW relative to both the official game currency (RG) and common commodity substitutes.

6. OCM Peg System

6.1 What a peg is

An OCM listing's peg defines how a customer can pay for an item using goods instead of EW. The peg specifies the peg item (what the customer pays with, e.g. Fat, Resin, Copper Ingots) and the peg quantity (how many units of the peg item are required per unit of the listed item).

The peg converts an item-for-item trade into the EW accounting system so that the canonical EW value can be computed, the fee (if any) can be charged correctly, and both parties receive accurate transaction history.

6.2 STORE mode

The listing price is pegged to the store's published price for the peg item. The merchant chooses which side of the store's price to use:

canonicalEW = requestedUnits × storePricePerUnit( side )
(backend: storePricePerInd_( catalog, pegItemName, side ))

Where side is either BUY or SELL, chosen by the merchant at listing creation. Store mode listings automatically reprice if the store's price sheet is updated before the trade is submitted. Once the trade request is submitted, the price is locked in the immutable snapshot.

6.3 HALF mode

The merchant sets a custom peg ratio (pegQtyPerInd) — how many units of the peg item a customer pays per individual unit of the listed item.

canonicalEW = requestedUnits × pegQtyPerInd × storePricePerUnit( primarySide )
(backend: primaryPeg.pegQtyPerInd × primaryPegPricePerInd)

HALF mode listings do not automatically reprice. The merchant controls the exact exchange ratio regardless of store price changes.

6.4 Multi-peg configuration

A listing can have one primary peg and up to 10 alternate pegs, for a maximum of 11 accepted payment items. (Backend: validatePegsAndNormalize_() throws if altPegs.length > 10.)

Example: a merchant can accept Fat, or Resin, or Copper Ingots, or direct EW payment — all on the same listing. The customer selects which peg to use when submitting the trade request.

6.5 selectedPegEW vs canonicalEW

canonicalEW    = requestedUnits × primaryPeg.pegQtyPerInd × storePricePerInd( primaryPeg )
selectedPegEW = requestedUnits × selectedPeg.pegQtyPerInd × storePricePerInd( selectedPeg )

canonicalEW is the EW-equivalent value at primary peg store prices. It is used for: fee calculation, merchant balance credit, and transaction records.
selectedPegEW is the EW-equivalent value of the customer's chosen peg. It may differ from canonicalEW if the customer chose an alternate peg with a different store price, or if prices have shifted since the listing was created.

The immutable trade snapshot locks both values at the moment the trade request is submitted, protecting both parties from price changes during the approval window.

Tip for merchants: set the primary peg to your best offer — the peg that gives customers the most attractive deal. The fee is always computed from canonicalEW (primary peg), so pricing the primary peg competitively minimizes the fee and makes the listing more attractive simultaneously.

6.6 Item quantity rounding

When the customer pays in items, the quantity is always rounded up to the nearest whole integer — you cannot pay with a fractional item:

payItemQty = ceil( requestedUnits × pegQtyPerInd )
(backend: ceilInt_( rawPayItems ))

This protects the merchant from receiving less than the agreed quantity.

6.7 Fee calculation

feeEW = ceil( canonicalEW × 0.10 )    [admin-service scenario only]
feeEW = 0                                [merchant self-service scenario]

The fee is charged to the merchant and destroyed — it does not go to the admin. It is always computed from canonicalEW (the primary peg value), regardless of which peg the customer chose to pay with. Item-based payments are never subject to a deduction: if the customer pays in items, the merchant receives 100% of the agreed item quantity. Only the EW equivalent is used to compute and charge the fee.

6.8 Worked example — STORE mode trade with Fat peg

A merchant lists 20 Steel Ingots at STORE sell price, peg: 16 Fat per ingot.
A customer requests 10 ingots. Store sell price for Steel Ingots: ~30 EW per ingot (illustrative).

canonicalEW    = 10 × 30                = 300 EW
payItemQty     = ceil( 10 × 16 )       = 160 Fat
feeEW (admin) = ceil( 300 × 0.10 )   = 30 EW

Admin-service scenario (merchant does not self-deliver):
Customer pays: 160 Fat → delivered to merchant's deposit box
Merchant receives: 160 Fat, then −30 EW fee deducted from balance
30 EW is destroyed and removed from circulation.

Self-service scenario (merchant accepts and delivers personally):
Customer pays: 160 Fat → delivered to merchant's deposit box
Merchant receives: 160 Fat, no EW fee charged.

In both scenarios, the store's own stock of Steel Ingots is unaffected — this is a player-to-player OCM trade, not a store purchase.

Prices are illustrative. Check the live price sheet for current values.

7. Liquidity Guarantee and Metal Backing

7.1 The liquidity guarantee

The store maintains both buy AND sell orders at all times: a player can always sell items to the store (receive EW), and a player can always spend EW at the store (receive items). No willing counterparty is required at the moment of exchange. This is the fundamental property that makes EW a reliable medium of exchange.

Contrast with barter: both parties must want what the other has, at the same time, and must agree on a price. Contrast with RG: RG-based stores do exist on TOPS, but they are vulnerable to exploitation because RG itself inflates — any player with a mob farm can generate enough RG to strip a store of its inventory at the originally posted prices.

7.2 Why the store's item value exceeds EW in circulation

Every time a sell order is approved:

value_received_by_store = qty × sellPrice    (what the store will charge buyers)
EW_issued_to_seller     = qty × buyPrice     (what the store paid)
surplus_per_transaction = qty × (sellPrice − buyPrice)    (always > 0)

Because the spread is always positive, the store accumulates more item value than EW it issues. Over time:

total_item_value_in_stock > total_EW_in_circulation

This means EW can always be exchanged for something of real in-game value as long as the store has any stock at all.

Additional nuance: the spread varies by item, and the post-trade price adjustment changes how much the store effectively earns per transaction. In the worst case — if a single large transaction moves the stock from 0 to the full target — the store may end up paying out close to what it will eventually sell the goods for, making little margin on that particular trade. In better cases, many small transactions accumulate a larger effective spread before prices converge.

7.3 Metal backing and the insurance reserve

A portion of the store's reserves are held specifically as precious metals: Silver, Gold, Steel, Copper, Iron, Tin, Zinc, Bismuth, Nickel, Lead, and Meteoric Iron. These metals serve as the redemption asset for EW insurance policies.

Solvency goal: total_metal_reserve_value ≥ total_EW_in_circulation

When this goal is met, the system can in theory redeem all EW in circulation for metals simultaneously — surviving a full "bank run" scenario. This goal was achieved during the previous wipe cycle. The current wipe is rebuilding reserves as quickly as player participation allows.

7.4 Why low metal reserves do NOT mean EW has lost value

EW is backed by the full diversified stock of all items the store trades, not just metals. Low metal reserves mean metal prices are temporarily high (supply low relative to demand), which incentivizes players to gather and sell metals. Once reserves refill, metal prices stabilize.

EW can still be spent on all non-metal items even when metal reserves are low. Diversified backing makes EW resilient to shortages in any single item category — a structural advantage over single-commodity-backed systems.

7.5 Insurance: how EW converts to metals

When a player deposits into an insurance policy, the backend computes exactly which metals and quantities they receive. (Backend function: ins_calcMetalsForEW_())

Inputs:

Per metal M with allocation allocM %:

ewForMetalM    = ewAmount × ( allocM / 100 )
ingotsM        = floor( ewForMetalM / pricePerIngotM )
leftoverM      = ewForMetalM − ( ingotsM × pricePerIngotM )
nuggetsM       = floor( leftoverM / pricePerNuggetM )
insuredM       = ( ingotsM × pricePerIngotM ) + ( nuggetsM × pricePerNuggetM )
leftoverEWM   = ewForMetalM − insuredM

Special case: Meteoric Iron uses a nugget ratio of 2 nuggets per ingot. All other metals use the standard ratio of 20 nuggets per ingot.

Totals:

totalInsuredEW  = ΣM insuredM
totalLeftoverEW = ewAmount − totalInsuredEW

The totalLeftoverEW is returned to the player's circulating EW balance — it is not lost. It arises because item quantities must be whole numbers (you cannot receive 2.7 ingots).

7.6 Insurance policy lifecycle (state machine)

  ┌─────────┐
│  Empty  │
  └────┬────┘
     │ set allocation (immediate — no admin approval)
       ▼
  ┌──────────────────────┐
  │  Empty (ready)       │
  └──────────┬───────────┘
         │ requestDeposit → admin approves
         ▼
  ┌──────────────────────┐
  │   Active (funded)    │◄────────────────────────────┐
  └──────────┬───────────┘          │
             │           │
    ┌────────┼────────────────────┐             │
    │    │        │       │
    ▼    ▼         ▼ │
requestWi- updateAlloc-      requestWithdraw-         │
thdrawUnits ation          Metals          │
    │        │ → REALLOC         │    │
    │        │   Pending │          │
    │        │   → admin   │   │
  │        │   approves    │             │
    │        ▼     ▼             │
    │  Active (realloc-  Empty (EW nullified —│
    │  ated)    metals delivered,          │
    │     │         not returned)      │
    │        └────────────────────────────────────────┘
    │
    ▼ admin approves withdrawal
  ┌───────┐   ┌───────────────────────────┐
  │ Empty │    or    │ Active (partial withdrawal │
  └───────┘       │ remains) │
      └───────────────────────────┘

Key rules:

8. Research Context: What This Economy Is Studying

This section describes Vak's Store as an ongoing experiment in small-scale player-driven economics. The sections below cover the research framing, questions, findings, and limitations in a personal as well as analytical tone, reflecting how this project has actually been experienced and observed.

8.1 Research framing

Vak's Store is not just a trading tool — it is an ongoing study of small-scale player-driven economics. The system was built with observability as a first principle: every transaction is logged, every balance change is recorded, and aggregate economy-wide metrics are published daily. This section documents what the study is measuring and what has been observed so far.

8.2 Research questions being studied

The system continuously collects data relevant to the following questions:

8.3 Observable findings (current and previous wipe cycles)

The store has attracted consistent participation from both new and veteran players. Veterans with mob farms do participate and can trade at large volumes, but they don't dominate EW acquisition — the store accepts a wide range of items, and many players earn EW through crafting, gathering, or farming items that have nothing to do with mob drops. That's been one of the more pleasant surprises: the breadth of participation has stayed healthy even as a few high-volume traders have emerged.

Price history charts confirm supply-and-demand behavior: over-supplied items drop in price; under-supplied items rise. The insurance system saw meaningful uptake during the previous wipe, with total metal reserves exceeding total EW in circulation — the solvency goal was achieved. Wealth distribution data shows moderate concentration consistent with typical small-economy distributions, without extreme outliers dominating.

8.4 Limitations of the research

The sample size is small — 30–100 active players per wipe — nowhere near statistically significant by any academic standard. There's an observer effect: players know they're participating in a designed system, which probably affects how they behave. There's a single point of trust (one admin handles all approvals), which introduces both a bottleneck and a potential source of bias. There's no control group, no EW-free version of the same server to compare against. And each server wipe resets the economy, which disrupts any attempt at long-run continuity.

The research is informal. No institutional review, no academic publication. This is a community project that happens to collect economically interesting data. (For now.)

8.5 Comparison to academic small-scale economy research

Several academic studies have investigated player-driven economies in games including Eve Online, Runescape, and Ultima Online. Key comparisons:

Similarities: spontaneous price discovery, occupational specialization, and wealth concentration emerge in all of these systems.

Differences: EW is not tradeable outside the system (no real-money speculation or external arbitrage), the market size is much smaller, and the "central bank" (Vak) has a direct personal relationship with all market participants — a condition not present in larger game economies.

For broader economic context:

8.6 What would falsify the EW model

The EW model would fail — in an economically interesting way — if:

None of these failure modes have occurred. The system has functioned as designed across multiple wipe cycles.

9. Limitations

9.1 Centralized approval bottleneck. All store requests and admin-handled OCM trades require Vak's manual approval. There is no smart contract or automated settlement. Trade throughput is bounded by admin availability. During periods of high activity or admin absence, pending requests can queue for hours or days.

9.2 No in-game enforcement. The system records that item delivery must occur and tracks confirmation. It cannot force delivery in-game. If a player picks up items without fulfilling their end of a trade, resolution depends on admin action (balance clawback) and community trust.

9.3 Google Sheets concurrency. Write operations on Google Sheets are not fully atomic. Simultaneous writes to the same row can theoretically conflict. The backend mitigates this with LockService but does not completely eliminate the risk under extreme concurrency.

9.4 Price adjustment lag on manual items. While the price adjustment formula is algorithmic (Section 4.3), the spread itself (min/max) is set manually per item by Vak. Setting the spread for a new item or revising it for an existing item requires manual intervention. Items with an outdated spread may not respond correctly to real market conditions.

9.5 Insurance reserves are rebuilding. The solvency goal (metal reserves ≥ EW in circulation) was met in the previous wipe cycle. The current wipe started from zero and is rebuilding. Until the goal is met, not all EW can be simultaneously redeemed for metals.

9.6 Wipe dependency. The EW economy exists only while the TOPS server is active and players are participating. Each server wipe resets all in-game items. EW balances are handled per-wipe at Vak's discretion, with fairness and continuity considered. There is no guaranteed balance rollover between wipes.

9.7 Experimental scope. Vak's Store is a community project run by one person. It is not a regulated financial system and has no real-money implications. It should be understood as a social experiment in in-game economics, not as a product or service.

10. Full Transaction Type Reference

Quick-reference table for all transaction types, their EW supply effect, and the backend event that triggers each one.

Transaction Trigger EW created EW destroyed Net
Store Sell Order Player sells items to store Yes No +
Store Buy Order Player buys items from store No Yes
P2P Transfer Player sends EW to player No No 0
OCM (self-service) Merchant self-delivers No No 0
OCM (admin-service) Admin delivers for merchant No Yes (10%)
Insurance Deposit EW → reserve (locked) No Yes (locked)
Insurance Withdraw Reserve → EW (returned) Yes No +
Metal Withdrawal Reserve → physical metals No Yes (nullif.)
Admin Balance Adjust Admin manual correction (Admin only) Either Either ±