# Token exchange Withdraw Diagram ```plantuml participant "Game" as game participant "Backend" as back participant "Frontend" as front participant "Exchange Contract" as contract front -> back: request in-game user balance back -> game: request in-game user balance game -> back: response with user balance back -> front: response with user balance front -> back: Get contract with multi signer - Amount: 10000, NFT: Owned NFT back -> back: Validation Request (Daily, Weekly, Monthly widrawable amount, NFT required check, user have enough balance in game) back -> game: send GameCurrencyWithdrawal event game -> game: decrease user balance game -> back: send "success" response after balance adjustment back -> front: Response Contract(On-Chain amount, In-game amount, xr, nft) front -> contract: Processing Token Exchanging contract -> front: Return TxID front -> back: Confirm Transaction(TxID) back -> back: Fetch Transaction(TxID) back -> back: Validate Transaction(Fetch value: On-chain amount, in-game amount, xr, nft) back -> game: If tx failed send RollbackWithdrawal event to restore user balance back -> back: if tx success, exchange fee will be added to reward account game -> back: send "success" response after balance adjustment back -> front: Return Token Exchange Success