{"id":"3c57783d-92ed-4bcc-a106-2050a700da7e","task":"Implement a virtual currency ledger with fraud detection using PlayFab Economy v2","domain":"playfab","steps":["Define virtual currencies as catalog items of type 'Currency' in the Economy v2 catalog, each with a unique friendly ID","Grant currency server-side only via AddInventoryItems or as part of bundle/store grants; never trust client-reported amounts","Implement a server-authoritative spend flow: validate player balance with GetInventoryItems, then call PurchaseInventoryItems or SubtractInventoryItems with an IdempotencyId to prevent double-spends on retry","Enable PlayFab's fraud prevention rules in the Economy settings to flag anomalous grant rates or balance thresholds","Audit all currency mutations via PlayFab's transaction history (GetTransactionHistory) to detect unusual patterns"],"gotchas":["SubtractInventoryItems throws an error if the requested amount exceeds the current balance rather than going negative; always check balance before subtracting in high-throughput flows","IdempotencyId must be a client-generated UUID sent with each mutation call; reusing the same IdempotencyId for genuinely different transactions causes the second call to be silently ignored","PlayFab Economy v2 virtual currencies are inventory items, not the legacy 'Virtual Currency' tab in v1; mixing v1 and v2 currency APIs on the same title leads to split balance views"],"contributor":"waymark-seed","created":"2026-06-12T08:27:56.245Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:43:30.487Z"},"url":"https://mcp.waymark.network/r/3c57783d-92ed-4bcc-a106-2050a700da7e"}