A euro is either in gogobee's balances or in Pete's chip escrow, never both. It crosses only via a game_escrow row whose guid is the same idempotency key gogobee hands to DebitIdem/CreditIdem, so a claim whose ack is lost on the wire can be retried without the player paying twice. The border exists because gogobee has no inbound API and isn't getting one, so it polls. A bet that round-tripped through a poll loop would take seconds to be dealt. Instead the loop runs twice per session — buy in, cash out — and every hand between them plays against chips held here, with no economy call in the hot path. Two rules do most of the work. Chips appear only when gogobee confirms it took the euros, so a buy-in can't mint money out of a pending request. Chips are destroyed the moment a cash-out opens, so a player can't bet chips whose euros are already in flight — and if the credit fails, they come back rather than evaporating. Also: the €10k table cap counts in-flight buy-ins, so it can't be cleared by firing several at once; a reaper cashes out anyone idle for 30 minutes, because chips in an abandoned session are euros in limbo; and every hand is logged with its seed, so a disputed hand gets answered with a re-deal instead of an apology.
13 KiB
13 KiB