---
id: wiki-2026-0508-프리미엄-통화-브릿지-premium-currency-bri
title: 프리미엄 통화 브릿지(Premium Currency Bridge)
category: 10_Wiki/Topics
status: verified
canonical_id: self
aliases: [Premium Currency Bridge, Hard-Soft Currency Bridge, Currency Conversion Layer, 통화 브릿지]
duplicate_of: none
source_trust_level: A
confidence_score: 0.9
verification_status: applied
tags: [game-economy, monetization, currency-design, f2p]
raw_sources: []
last_reinforced: 2026-05-10
github_commit: pending
tech_stack:
  language: typescript
  framework: nodejs-economy
---

# 프리미엄 통화 브릿지(Premium Currency Bridge)

## 매 한 줄
> **"매 hard currency 매 직접 의 모든 item 매 구매 X — 매 bridge layer 의 의 의 soft currency / premium feature 의 의 conversion"**. 매 Genshin (Genesis Crystal → Primogem → Wishes), 매 Clash Royale (Gem → Gold/Chest), 매 Honkai Star Rail (Oneiric Shard → Stellar Jade), 매 매 매 동일한 design — 매 conversion friction 매 hard purchase 의 의 의 deliberate distance 의 의 의 의 의 create.

## 매 핵심

### 매 typical 3-tier currency stack
1. **Hard currency (premium)**: 매 IRL 매 buy. 매 Genesis Crystal, Gem, Robux 등.
2. **Bridge / mixed currency**: 매 hard 매 의 → 매 의 의 의 convert 가능 + 매 free 의 의 earn 가능. 매 Primogem, Stellar Jade.
3. **Soft / earnable**: 매 gameplay 의 grind. 매 Mora, Credit, Gold.

### 매 bridge 매 functions
- **delay psychology**: 매 IRL → in-game gain 의 의 두 step. 매 impulse buy 매 lower-friction.
- **regulatory cushion**: 매 jurisdictions 매 의 conversion 매 indirect 의 의 의 loot-box law 의 의 의 navigate.
- **f2p parity perception**: 매 free player 매 same Primogem 의 earn 의 → 매 perceived fairness.
- **bundle accounting**: 매 store offers (60+10 bonus) 매 visible 의 의 conversion 의 의 의 의.

### 매 응용
1. *Genshin Impact*: Genesis Crystal → Primogem (1:1 + bonus). Primogem → Fate (160:1 wish).
2. *Honkai Star Rail*: Oneiric Shard → Stellar Jade. SJ → Star Rail Pass (warp).
3. *Clash Royale*: Gem → Gold (변동 rate). Gem → Chest (직접).
4. *PUBG Mobile*: UC → BP / event token.
5. *Fortnite*: V-Bucks (single-tier, no bridge — 매 unique).

## 💻 패턴

### Currency type definitions
```typescript
type Currency = "USD" | "GenesisCrystal" | "Primogem" | "Mora";

interface Wallet {
  balances: Record<Currency, number>;
}

const FX: Record<string, number> = {
  "USD->GenesisCrystal": 99,        // $0.99 → 60 + 0 bonus baseline
  "GenesisCrystal->Primogem": 1,    // 1:1 baseline
  "Primogem->IntertwinedFate": 1/160, // 160 primo per wish
};
```

### Bridge conversion (with bonus tiers)
```typescript
const BUNDLE_BONUS = [
  { spend: 0.99,  base: 60,    bonus: 0 },
  { spend: 4.99,  base: 300,   bonus: 30 },   // first-time x2 separately
  { spend: 14.99, base: 980,   bonus: 110 },
  { spend: 29.99, base: 1980,  bonus: 260 },
  { spend: 49.99, base: 3280,  bonus: 600 },
  { spend: 99.99, base: 6480,  bonus: 1600 },
];

function purchaseGenesis(usd: number): number {
  const tier = BUNDLE_BONUS.find(t => Math.abs(t.spend - usd) < 0.01);
  if (!tier) throw new Error("Invalid SKU");
  return tier.base + tier.bonus;
}

function genesisToPrimogem(gc: number): number {
  return gc * FX["GenesisCrystal->Primogem"];
}
```

### Wallet ledger (audit-safe)
```typescript
interface LedgerEntry {
  ts: number;
  userId: string;
  currency: Currency;
  delta: number;
  reason: "purchase" | "convert" | "spend" | "grant" | "refund";
  refTxId?: string;
}

class Ledger {
  entries: LedgerEntry[] = [];
  apply(e: Omit<LedgerEntry, "ts">) {
    this.entries.push({ ...e, ts: Date.now() });
  }
  balance(userId: string, c: Currency): number {
    return this.entries
      .filter(e => e.userId === userId && e.currency === c)
      .reduce((s, e) => s + e.delta, 0);
  }
}
```

### Bridge spend with anti-double-spend
```typescript
async function spendPrimogem(
  ledger: Ledger,
  userId: string,
  amount: number,
  txId: string  // idempotency key
): Promise<{ ok: boolean; reason?: string }> {
  if (ledger.entries.some(e => e.refTxId === txId)) {
    return { ok: true };  // idempotent replay
  }
  if (ledger.balance(userId, "Primogem") < amount) {
    return { ok: false, reason: "insufficient" };
  }
  ledger.apply({ userId, currency: "Primogem", delta: -amount,
                 reason: "spend", refTxId: txId });
  return { ok: true };
}
```

### F2P-vs-whale parity tracking
```typescript
function monthlyEarnableBridge(): number {
  // Daily commissions (60) + abyss (~600/cycle) + events (~1500) + bp (~680)
  const daily = 60 * 30;
  const abyss = 1200;          // 2 cycles
  const events = 1500;
  const bp = 680;
  return daily + abyss + events + bp;  // ~5180 primogem ≈ 32 wishes
}
```

### Regional pricing matrix
```typescript
const REGION_FX: Record<string, number> = {
  "US": 1.0, "EU": 0.95, "JP": 0.90,
  "TR": 0.30,  // historical PPP discount
  "AR": 0.25, "BR": 0.50, "IN": 0.60,
};
function regionalUSD(usd: number, region: string): number {
  return usd * (REGION_FX[region] ?? 1.0);
}
```

## 매 결정 기준
| 상황 | currency stack |
|---|---|
| 매 simple cosmetic store | single-tier (V-Bucks) |
| 매 gacha + grind dual loop | 3-tier with bridge |
| 매 light monetization indie | hard-only or single-tier |
| 매 enterprise / regulatory-sensitive | bridge layer + clear ToS |

**기본값**: 매 gacha + progression hybrid 매 → 매 3-tier (hard → bridge → soft) 매 standard.

## 🔗 Graph
- 부모: [[Game Economy]]
- 변형: [[Hard Currency]]
- 응용: [[자원 로지스틱스(Resource Logistics)]] · [[유니버스 LTV(Universe LTV)]] · [[ARPU]]
- Adjacent: [[Idempotency]]

## 🤖 LLM 활용
**언제**: 매 f2p / gacha / live-service 매 economy 매 design 시, 매 conversion-funnel 매 friction 의 의 의 calibrate 시.
**언제 X**: 매 premium one-time-purchase (no IAP) — 매 bridge unnecessary, 매 just confuses player.

## ❌ 안티패턴
- **매 4+ tiers**: 매 player 매 confused. 매 store screen 매 cluttered.
- **매 hidden conversion rate**: 매 ToS-buried rate → 매 trust 의 of erode + regulatory risk.
- **매 bridge ↔ hard 매 reversible**: 매 refund / arbitrage 의 의 의 의 의 의 의 expose.
- **매 no idempotency on spend**: 매 double-spend 매 의 의 race condition. 매 audit ledger 매 must.

## 🧪 검증 / 중복
- Verified (HoYoverse store ToS, Supercell economy 의 talks, GDC F2P monetization talks 2023-2025, Deconstructor of Fun analyses).
- 신뢰도 A.

## 🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — 3-tier stack + bundle bonus tiers + idempotent ledger code |
