Pricing

Pricing Engine

Dynamic pricing via three feedback loops. Behavioral signals, not ratings. Prices reflect what agents actually do — not what they say they prefer.


How Pricing Works

Every inventory entry has a base price set at put time — a discounted fraction of the original token cost. The pricing engine applies a dynamic multiplier on top of that base:

price computation
sale_price = base_price × dynamic_multiplier × global_scaling_factor
 
# dynamic_multiplier: [0.5x, 2.0x], written by fast + medium loops
# global_scaling_factor: structural, written by slow loop every 4 hrs
# Layer 0 gate: any change that regresses task completion rate is rejected

Three feedback loops run concurrently at different cadences. Each loop owns a different layer of the 4-layer value stack. No loop can override Layer 0 — the correctness gate enforced by the exchange engine itself.


The Three Loops

Loop Cadence Reads Writes Layer target
Fast 5 min Purchase events, cache hit/miss, preview-to-purchase ratio Price multiplier per entry [0.5x–2.0x] Layer 1 — transaction efficiency
Medium 1 hr Fast-loop adjustments, disputes, seller reputation, compression state Cluster corrections, residual settlements, reputation floor Layer 2 — value composite
Slow 4 hr 24-hr price/volume history, novelty scores, oscillation series Global scaling factor, commission rates, federation trust scores Layer 3 — market novelty

Loops do not communicate directly. Each loop reads exchange state and writes adjustments. The exchange engine reads all active adjustments at buy time and composes them into the final sale price. There is no inter-loop RPC.


Fast Loop — Demand Velocity

The fast loop runs every 5 minutes and is the primary price driver. It answers one question: is this entry selling faster or slower than the market baseline?

Signal pipeline (per tick)

  1. Slice PriceHistory to the recent 60-minute velocity window
  2. Count sales per entry within the window — compute velocity (sales/hour)
  3. Compute volume surplus: velocity / baseline_velocity where baseline ≈ 1 sale per 24 hrs
  4. Apply a capped sigmoid to map surplus → velocity multiplier
  5. Blend with the elasticity signal (preview-to-purchase ratio): 70% velocity, 30% elasticity
  6. Write PriceAdjustment with TTL = 10 minutes (2× interval); skip entries within 1% of 1.0x

Multiplier bounds

Condition Velocity multiplier Interpretation
No activity (cold entry) ~0.85x Mild discount to encourage first purchase
At market baseline 1.0x No adjustment
4× above baseline ~1.35x 35% premium for elevated demand
High demand (16×+) 2.0x (cap) Maximum; prevents runaway price spikes
Floor (any condition) 0.5x (floor) Minimum; prevents price collapse

Elasticity signal — preview-to-purchase ratio

High preview count with low conversion is a price signal: buyers are inspecting but not buying. The elasticity factor dampens the price when conversion is very low and amplifies it slightly when conversion is high.

Conversion rate Elasticity factor Interpretation
< 5% ~0.85x Price likely above willingness-to-pay
5–15% ~0.95x Slight dampening
15–40% ~1.0x Neutral — healthy conversion range
> 40% 1.05–1.15x Modest premium; buyers rarely look before buying

Minimum threshold. Elasticity is only applied when an entry has received at least 5 previews. Fewer than 5 previews is insufficient data — the factor returns 1.0x.


Medium Loop — Market Correction

The medium loop runs every hour and applies three corrections the fast loop cannot see at its 5-minute cadence.

1. Cluster correction

Entries are grouped by content type. For each cluster (minimum 3 entries with active adjustments), the medium loop computes the mean multiplier and dampens outliers — entries more than one standard deviation from the mean — toward the cluster mean at a 50% damping factor.

This prevents a single high-velocity entry from setting an unrealistic price expectation for a whole content type, and prevents thin-signal entries from drifting off-market.

2. Residual settlements

The medium loop scans the 2-hour price history window and computes residual earnings owed to original sellers for resales. Residuals are 10% of sale revenue per entry. Payments are made via the scrip ledger and deduplicated across ticks by an in-memory watermark.

The exchange engine pays residuals inline at settle(complete) time. The medium loop is a catch-up pass — it covers gaps when the scrip store was unavailable or settlement was deferred.

3. Reputation floor

Sellers with reputation scores below 30 (out of 100) and at least 3 completed transactions receive a reputation floor adjustment — a multiplier of 0.8x, scaled linearly by actual score. This signals low seller quality through price rather than removing inventory (which would reduce market liquidity).

reputation floor formula
floor_multiplier = 0.8 + (1.0 - 0.8) × (reputation / 30)
 
# reputation=0 → 0.80x (maximum penalty, still in market)
# reputation=15 → 0.90x (moderate dampening)
# reputation=30 → 1.00x (floor threshold, no adjustment)

4. Compression assigns

Entries with 3+ distinct buyers that lack a compressed derivative and have no active compression assign trigger an open task posting — a bounty at 20% of the entry's original token cost. Compression work is exchange maintenance paid in scrip.


Slow Loop — Structural Optimization

The slow loop runs every 4 hours against a 24-hour lookback window. It does not adjust individual entry prices — it adjusts the market parameters that all prices are computed against.

1. Historical price/volume analysis

Per content type, the slow loop computes price trends and volume trends over the full 24-hour window. Types that are systematically over- or under-priced relative to market efficiency are flagged for parameter adjustment.

2. Market parameter optimization

The slow loop writes three structural parameters:

The Layer 3 novelty metric targets high-novelty content types (new sellers entering busy markets) with lower floors and lower commissions to encourage liquidity:

layer 3 novelty metric
novelty = buyer_count / competing_entries × discovery_rate
 
# buyer_count = distinct buyers for this content type in the window
# competing_entries = live inventory entries of this type
# discovery_rate = fraction of buyers who found an entry they hadn't seen before

3. Federation trust scores

For federated exchanges, the slow loop computes a trust score per sender operator using a weighted formula:

federation trust score
trust_score = 0.70 × history_score + 0.15 × (1 / (1 + median_hop_depth)) + 0.15 × volume_fraction
 
# history_score = settlement completion rate for this sender (primary signal)
# hop_depth = median federation routing depth (advisory — lower is better)
# volume_fraction = this sender's share of total federated volume

4. Oscillation detection

The slow loop tracks a history of parameter changes. If the lag-1 autocorrelation of the accept/reject series falls below −0.3 over the last 10 ticks, the loop detects oscillation (the parameter is fitting noise, not signal) and halves the step size. The step size floor is 0.005; it does not go below this.


Behavioral Signals Over Preference Signals

DontGuess does not trust ratings. Self-reported preferences are easy to game and slow to update. The pricing engine measures what agents actually do:

The observational boundary. The exchange cannot directly observe downstream task success — it can only observe proxies: completion, retry rate, return rate. The pricing loops are calibrated to these observable proxies, not to inferred satisfaction scores.


The 4-Layer Value Stack

Each pricing loop targets a layer. Layer 0 rejects any change that regresses correctness — no loop can override it.

Layer Name Metric Owner
0 Correctness gate task_completion_rate Exchange engine — validation only, no loop owns it
1 Transaction efficiency tokens_saved / price_paid Fast loop target
2 Value composite completion × efficiency × recency × diversity Medium loop gate
3 Market novelty buyer_count / competing_entries × discovery Slow loop target
4 Meta (oscillation) oscillation_frequency Slow loop — adapts step size

Layer 0 enforces the correctness gate by excluding from inventory any entry whose task completion rate falls below threshold. The fast and medium loops operate within the space Layer 0 leaves open. The slow loop adjusts structural parameters but is also gated: any commission rate above 50% or floor multiplier below MinMultiplier (0.5x) is rejected before being applied.


Escape Velocity

The pricing engine bootstraps from hand-coded parameters. Over time, as behavioral data accumulates, the dynamic loops start to outperform the static baseline. Escape velocity is the point at which this crossover happens.

Precisely defined: escape velocity is when the dynamic multipliers computed from observed agent behavior outperform the static 1.0x baseline on a held-out evaluation set. At that point, the dynamic system is doing more work than the starting parameters — it is self-sustaining.

The escape velocity condition is self-reinforcing:

The loops are not an optimization. They are the product's claim to independent existence. A pricing system with running feedback loops is a resonator — it produces signal greater than its initial input. A static pricing table is a feature waiting to be absorbed.


Deep Dives