diff --git a/public/UnityBuild/tetris/Build/prod.data b/public/UnityBuild/tetris/Build/prod.data index c9a3a54..025b42a 100644 Binary files a/public/UnityBuild/tetris/Build/prod.data and b/public/UnityBuild/tetris/Build/prod.data differ diff --git a/public/UnityBuild/tetris/Build/prod.wasm b/public/UnityBuild/tetris/Build/prod.wasm index 4c3334f..78fca7a 100644 Binary files a/public/UnityBuild/tetris/Build/prod.wasm and b/public/UnityBuild/tetris/Build/prod.wasm differ diff --git a/src/components/GameModal.tsx b/src/components/GameModal.tsx index 7780434..61fb4d6 100644 --- a/src/components/GameModal.tsx +++ b/src/components/GameModal.tsx @@ -8,7 +8,8 @@ import { PriceSelection } from "./PriceSelection"; import { GameSelection } from "./GameSelection"; import { createBet } from "@/shared/solana_helpers"; import { Game } from "@/types/Game"; -import { EXPLORER_TX_TEMPLATE } from "@/data/shared"; +import { connection, EXPLORER_TX_TEMPLATE } from "@/data/shared"; +import { CONFIRMATION_THRESHOLD } from "@/shared/constants"; interface GameModalProps { isOpen: boolean; @@ -61,23 +62,33 @@ export default function GameModal({ isOpen, onClose }: GameModalProps) { } setIsProcessing(true); + toast.loading("Creating bet"); try { const tx = await createBet(wallet, user?.id ?? "", selectedPrice, selectedGame.id, false); const url = EXPLORER_TX_TEMPLATE.replace("{address}", tx); if (tx.length > 5) { - toast.success(`Bet created successfully!`, { - action: { - label: "View TX", - onClick: () => window.open(url, "_blank"), - }, - }); + connection.confirmTransaction(tx, CONFIRMATION_THRESHOLD).finally(()=>{ + toast.dismiss(); + + toast.success(`Bet created successfully!`, { + action: { + label: "View TX", + onClick: () => window.open(url, "_blank"), + }, + }); + + }) + } onClose(); } catch (error) { console.error("Error creating bet:", error); toast.error("Failed to create bet. Please try again."); + toast.dismiss(); + } finally { setIsProcessing(false); + } }; diff --git a/src/components/HeroSection.tsx b/src/components/HeroSection.tsx index 1536791..f5d2454 100644 --- a/src/components/HeroSection.tsx +++ b/src/components/HeroSection.tsx @@ -7,7 +7,7 @@ import GameModal from "./GameModal"; import { HowItWorksModal } from "./HowItWorksModal"; import YourGames from "./YourGames"; import { Bet } from "@/types/Bet"; -import { fetchOpenBets, createBet, joinBet, getVaultByAddress } from "@/shared/solana_helpers"; +import { fetchOpenBets, createBet, getVaultByAddress } from "@/shared/solana_helpers"; import { ConnectedSolanaWallet, usePrivy, useSolanaWallets } from "@privy-io/react-auth"; import { RematchModal } from "./RematchModal"; @@ -21,7 +21,6 @@ export default function HeroSection() { const [lastActiveBet, setLastActiveBet] = useState(); const [rematchInProgress, setRematchInProgress] = useState(false); const [rematchTxError, setRematchTxError] = useState(false); - const [rematchBetAddress, setRematchBetAddress] = useState(null); const { wallets, ready } = useSolanaWallets(); const { user } = usePrivy(); @@ -102,8 +101,8 @@ export default function HeroSection() { const pollUntilFound = async ( maxRetries = 10, delayMs = 3000 - ): Promise => { - for (let i = 0; i < maxRetries; i++) { + ): Promise => { + for (let i:number = 0; i < maxRetries; i++) { const vault = await getVaultByAddress(solWallet, tx); if (vault) return vault; console.log(`Waiting for vault account... (${i + 1}/${maxRetries})`); @@ -166,8 +165,8 @@ export default function HeroSection() { address: string, maxRetries = 10, delayMs = 3000 - ): Promise => { - for (let i = 0; i < maxRetries; i++) { + ): Promise => { + for (let i:number = 0; i < maxRetries; i++) { console.log(`Polling vault for address ${address}... (${i + 1}/${maxRetries})`); const vault = await getVaultByAddress(solWallet, address); if (vault) return vault; @@ -175,13 +174,14 @@ export default function HeroSection() { } console.warn("Vault not found after max retries."); - return null; + return; }; - const rematchVault:Bet = await pollForVault(rematchAddress); + const rematchVault:Bet | undefined = await pollForVault(rematchAddress); if (rematchVault) { - const tx = await joinBet(solWallet, user?.id!, rematchVault.id, rematchVault.address); + // const tx = await joinBet(solWallet, user?.id!, rematchVault.id, rematchVault.address); + setMyActiveBet(rematchVault); setLastActiveBet(rematchVault); setRematch(false); @@ -286,6 +286,7 @@ export default function HeroSection() { return ( <> {myActiveBet && !rematch ? ( + (myActiveBet.owner_id && myActiveBet.joiner_id) ? (