From 3cd4f3a23339bd3cfa2a40c5b550596a8681048a Mon Sep 17 00:00:00 2001 From: RolandoDrRobot Date: Tue, 3 Jun 2025 22:45:32 -0600 Subject: [PATCH 01/10] update the way we fetch my beasts --- client/dev-dist/sw.js | 2 +- client/src/components/SpawnBeast/index.tsx | 30 ++++----- client/src/hooks/useBeasts.tsx | 71 +++++++++++++++++++--- client/vite.config.ts | 14 ++--- 4 files changed, 86 insertions(+), 31 deletions(-) diff --git a/client/dev-dist/sw.js b/client/dev-dist/sw.js index e955509a..5a1725df 100644 --- a/client/dev-dist/sw.js +++ b/client/dev-dist/sw.js @@ -82,7 +82,7 @@ define(['./workbox-20a2f87f'], (function (workbox) { 'use strict'; "revision": "3ca0b8505b4bec776b69afdba2768812" }, { "url": "index.html", - "revision": "0.90s8ruuoado" + "revision": "0.lod2n68ccfg" }], {}); workbox.cleanupOutdatedCaches(); workbox.registerRoute(new workbox.NavigationRoute(workbox.createHandlerBoundToURL("index.html"), { diff --git a/client/src/components/SpawnBeast/index.tsx b/client/src/components/SpawnBeast/index.tsx index 64188a9d..b6b4f1fd 100644 --- a/client/src/components/SpawnBeast/index.tsx +++ b/client/src/components/SpawnBeast/index.tsx @@ -1,8 +1,8 @@ // React and external libraries -import { useEffect, useState } from "react"; +import { useEffect, useMemo, useState } from "react"; import { useNavigate, useSearchParams } from 'react-router-dom'; import { useAccount } from "@starknet-react/core"; -import { Account } from "starknet"; +import { Account, addAddressPadding } from "starknet"; import { useDojoSDK } from "@dojoengine/sdk/react"; // Internal components @@ -13,14 +13,13 @@ import ProgressBar from '../ProgressBar/index.tsx'; // Hooks and Contexts import { useSystemCalls } from "../../dojo/useSystemCalls.ts"; import { usePlayer } from "../../hooks/usePlayers.tsx"; -import { fetchBeastsData, processBeastData } from "../../hooks/useBeasts"; +import { useBeasts } from "../../hooks/useBeasts"; // Types import type { SpawnBeastProps, SpawnBeastState } from '../../types/components'; -import type { Beast } from '../../types/game'; // Utils import { getRandomNumber } from './utils/helpers'; @@ -38,6 +37,14 @@ const SpawnBeast: React.FC = ({ className = '' }) => { const { spawn } = useSystemCalls(); const navigate = useNavigate(); const [searchParams] = useSearchParams(); + + const userAddress = useMemo(() => + account ? addAddressPadding(account.address).toLowerCase() : '', + [account] + ); + + const { myBeastsData, refetch } = useBeasts(userAddress); + console.info('myBeastsData', myBeastsData); // State const [state, setState] = useState({ @@ -83,20 +90,13 @@ const SpawnBeast: React.FC = ({ className = '' }) => { setSpawnProgress({ progress: 50, message: 'Generating your beast' }); const randomBeastId = getRandomNumber(MIN_BEAST_ID, MAX_BEAST_ID); const { spawnTx } = await spawn(randomBeastId); + console.info('spawnTx', spawnTx); + await new Promise(resolve => setTimeout(resolve, 2000)); if (spawnTx && spawnTx.code === "SUCCESS") { + refetch(); setSpawnProgress({ progress: 70, message: 'Beast generated! Setting as current' }); - let newBeast; - do { - // Recargar la lista de beasts usando GraphQL - const beastsData = await fetchBeastsData(); - const processedBeasts = await processBeastData(beastsData); - - // Encontrar la bestia recién creada - newBeast = processedBeasts.find((beast: Beast) => beast.player === account!.address); - await new Promise(resolve => setTimeout(resolve, 2000)); - } while (!newBeast); - + const newBeast = myBeastsData[0]; if (newBeast) { setSpawnProgress({ progress: 90, message: 'Finalizing setup' }); const setCurrentTx = await client.player.setCurrentBeast(account!, newBeast.beast_id); diff --git a/client/src/hooks/useBeasts.tsx b/client/src/hooks/useBeasts.tsx index e794d982..c4370d43 100644 --- a/client/src/hooks/useBeasts.tsx +++ b/client/src/hooks/useBeasts.tsx @@ -1,8 +1,8 @@ import { useEffect, useState } from "react"; import { dojoConfig } from "../dojo/dojoConfig"; import { lookupAddresses } from '@cartridge/controller'; -import { Beast, BeastEdge, BeastStatus, BeastStatusEdge, BeastStatuses } from '../types/game'; - +import { Beast, BeastEdge, BeastStatusEdge, BeastStatuses } from '../types/game'; + // Constants const TORII_URL = dojoConfig.toriiUrl + "/graphql"; const BEASTS_QUERY = ` @@ -31,6 +31,24 @@ const BEASTS_QUERY = ` } `; +const MY_BEASTS = (address: string) => ` + query GetBeastsByContract() { + tamagotchiBeastModels(where: { player: "${address}"}) { + edges { + node { + beast_id + birth_date + player + age + specie + beast_type + } + } + totalCount + } + } +`; + // API Functions export const fetchBeastsData = async (): Promise => { try { @@ -52,6 +70,26 @@ export const fetchBeastsData = async (): Promise => { } }; +export const fetchMyBeastsData = async (contractAddress: string): Promise => { + try { + const response = await fetch(TORII_URL, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ query: MY_BEASTS(contractAddress) }), + }); + + const result = await response.json(); + if (!result.data?.tamagotchiBeastModels) { + throw new Error('No beast data found'); + } + + return result.data; + } catch (error) { + console.error("Error fetching my beasts:", error); + throw error; + } +}; + export const processBeastData = async (data: any): Promise => { const playerAddresses = data.tamagotchiBeastModels.edges .map((edge: BeastEdge) => edge.node.player) @@ -85,18 +123,29 @@ const extractBeastStatuses = (statusModels: any): BeastStatuses => { }; // Hook -export const useBeasts = () => { +export const useBeasts = (userAddress?: string) => { const [beastsData, setBeastsData] = useState([]); + const [myBeastsData, setMyBeastsData] = useState([]); const [isLoading, setIsLoading] = useState(true); const [error, setError] = useState(null); + const [trigger, setTrigger] = useState(0); useEffect(() => { const loadBeasts = async () => { try { setIsLoading(true); - const data = await fetchBeastsData(); - const processedData = await processBeastData(data); - setBeastsData(processedData); + const [allBeastsData, myBeasts] = await Promise.all([ + fetchBeastsData(), + userAddress ? fetchMyBeastsData(userAddress) : Promise.resolve(null) + ]); + + const processedAllBeasts = await processBeastData(allBeastsData); + setBeastsData(processedAllBeasts); + + if (myBeasts) { + const processedMyBeasts = await processBeastData(myBeasts); + setMyBeastsData(processedMyBeasts); + } } catch (err) { setError(err instanceof Error ? err : new Error('Unknown error occurred')); } finally { @@ -105,11 +154,17 @@ export const useBeasts = () => { }; loadBeasts(); - }, []); + }, [userAddress, trigger]); + + const refetch = () => { + setTrigger(prev => prev + 1); + }; return { beastsData, + myBeastsData, isLoading, - error + error, + refetch }; }; diff --git a/client/vite.config.ts b/client/vite.config.ts index 7bc4d95b..2936a810 100644 --- a/client/vite.config.ts +++ b/client/vite.config.ts @@ -3,15 +3,15 @@ import topLevelAwait from "vite-plugin-top-level-await"; import { defineConfig } from "vite"; import { VitePWA } from "vite-plugin-pwa"; import wasm from "vite-plugin-wasm"; -//import fs from "fs"; +import fs from "fs"; export default defineConfig({ - // server: { - // https: { - // key: fs.readFileSync("mkcert+1-key.pem"), // Path to private key file - // cert: fs.readFileSync("mkcert+1.pem"), // Path to certificate file - // }, - // }, + server: { + https: { + key: fs.readFileSync("mkcert+1-key.pem"), // Path to private key file + cert: fs.readFileSync("mkcert+1.pem"), // Path to certificate file + }, + }, plugins: [ react(), wasm(), From d446452f4dad72f713891dca93b734b8a88fff0f Mon Sep 17 00:00:00 2001 From: RolandoDrRobot Date: Wed, 4 Jun 2025 21:48:46 -0600 Subject: [PATCH 02/10] set manifest --- .../components/Tamagotchi/utils/fetchAge.ts | 2 +- .../Tamagotchi/utils/fetchStatus.ts | 2 +- client/src/config/cartridgeConnector.tsx | 6 +++--- client/src/dojo/manifest_dev.json | 20 +++++++++++-------- dojo/torii-config.toml | 2 +- 5 files changed, 18 insertions(+), 14 deletions(-) diff --git a/client/src/components/Tamagotchi/utils/fetchAge.ts b/client/src/components/Tamagotchi/utils/fetchAge.ts index 840e2fcb..1bc3f841 100644 --- a/client/src/components/Tamagotchi/utils/fetchAge.ts +++ b/client/src/components/Tamagotchi/utils/fetchAge.ts @@ -3,7 +3,7 @@ import hexToDecimalArray from './hexToDecimalArray'; const fetchAge = async (account: any): Promise => { try { const response = await account?.callContract({ - contractAddress: "0x58971d723d0100ae8393550f9166c9dad9b79799a48fc31f0d9684ef556dda9", + contractAddress: "0x51af5c277d07337a8ef50599173d4b0a10597f3c0b85acebfec4ce9b53a6509", entrypoint: "get_beast_age_with_address", calldata: [String(account?.address)], }); diff --git a/client/src/components/Tamagotchi/utils/fetchStatus.ts b/client/src/components/Tamagotchi/utils/fetchStatus.ts index 7d0690c7..4960eaa6 100644 --- a/client/src/components/Tamagotchi/utils/fetchStatus.ts +++ b/client/src/components/Tamagotchi/utils/fetchStatus.ts @@ -3,7 +3,7 @@ import hexToDecimalArray from './hexToDecimalArray'; const fetchStatus = async (account: any): Promise => { try { const response = await account?.callContract({ - contractAddress: "0x58971d723d0100ae8393550f9166c9dad9b79799a48fc31f0d9684ef556dda9", + contractAddress: "0x51af5c277d07337a8ef50599173d4b0a10597f3c0b85acebfec4ce9b53a6509", entrypoint: "get_timestamp_based_status_with_address", calldata: [String(account?.address)], }); diff --git a/client/src/config/cartridgeConnector.tsx b/client/src/config/cartridgeConnector.tsx index c7689408..8cd41ba6 100644 --- a/client/src/config/cartridgeConnector.tsx +++ b/client/src/config/cartridgeConnector.tsx @@ -6,9 +6,9 @@ import { constants } from "starknet"; const { VITE_PUBLIC_DEPLOY_TYPE } = import.meta.env; const { VITE_PUBLIC_SLOT_ADDRESS } = import.meta.env; -const CONTRACT_ADDRESS_ACHIEVEMENTS = '0x1005116a48c9a8f7a6c946091e64dc8ced37962dc2bbb74355868229307c20d' -const CONTRACT_ADDRESS_TAMAGOTCHI_SYSTEM = '0x58971d723d0100ae8393550f9166c9dad9b79799a48fc31f0d9684ef556dda9' -const CONTRACT_ADDRESS_PLAYER_SYSTEM = '0x6b7b30fcd29c41bca831b87db67e3c8af2abb374dc2fabbbf09f4744aa22988' +const CONTRACT_ADDRESS_ACHIEVEMENTS = '0x6529b6a85bd7e4beaf4b8ead64b82fb115bec5a944c3b87fd35445231547fc6' +const CONTRACT_ADDRESS_TAMAGOTCHI_SYSTEM = '0x51af5c277d07337a8ef50599173d4b0a10597f3c0b85acebfec4ce9b53a6509' +const CONTRACT_ADDRESS_PLAYER_SYSTEM = '0x518610e4d4eda4f4086b7a7bd385a0f2fba50214cea195efcca834a6ab85f90' const policies: SessionPolicies = { contracts: { diff --git a/client/src/dojo/manifest_dev.json b/client/src/dojo/manifest_dev.json index 41d22618..b1b440c8 100644 --- a/client/src/dojo/manifest_dev.json +++ b/client/src/dojo/manifest_dev.json @@ -1,8 +1,8 @@ { "world": { "class_hash": "0x7c9469d45a9cdbab775035afb48e1fa73fb35ab059fcb9dfb0a301aa973e783", - "address": "0x55ab491f46e96bfdbefab82c7ff1101bf8fd10bdb4e47c01533bc2a2a1e9e9e", - "seed": "tamagotchi17", + "address": "0x2a61209988c0a784a6fe51d69875577435cc209bef7d8b121fb64c10f018d04", + "seed": "tamagotchi18", "name": "ByteBeasts Tamagotchi", "entrypoints": [ "uuid", @@ -1312,7 +1312,7 @@ }, "contracts": [ { - "address": "0x1005116a48c9a8f7a6c946091e64dc8ced37962dc2bbb74355868229307c20d", + "address": "0x6529b6a85bd7e4beaf4b8ead64b82fb115bec5a944c3b87fd35445231547fc6", "class_hash": "0x2ae3f43544bc745744f339fffc5390aac05e3a99f16aadba70859ecd5b46116", "abi": [ { @@ -1614,8 +1614,8 @@ ] }, { - "address": "0x58971d723d0100ae8393550f9166c9dad9b79799a48fc31f0d9684ef556dda9", - "class_hash": "0x42f4064e1316913658aa9097a3275f68b9d11d7c5282dfb026f78a6d61a25db", + "address": "0x51af5c277d07337a8ef50599173d4b0a10597f3c0b85acebfec4ce9b53a6509", + "class_hash": "0x52a9790e907235c127df5560cc2f89064188a5639fd1a0cd40fc9b9e9a646d9", "abi": [ { "type": "impl", @@ -1739,6 +1739,10 @@ "type": "struct", "name": "tamagotchi::models::beast_status::BeastStatus", "members": [ + { + "name": "player", + "type": "core::starknet::contract_address::ContractAddress" + }, { "name": "beast_id", "type": "core::integer::u16" @@ -2065,7 +2069,7 @@ ] }, { - "address": "0x6b7b30fcd29c41bca831b87db67e3c8af2abb374dc2fabbbf09f4744aa22988", + "address": "0x518610e4d4eda4f4086b7a7bd385a0f2fba50214cea195efcca834a6ab85f90", "class_hash": "0x24eeedaa48d3c3de399ec22d854f14c3533170902e21c18c8fc6e3bb8187a0d", "abi": [ { @@ -2352,7 +2356,7 @@ }, { "members": [], - "class_hash": "0x2d33cad545c3e9b01b8a328418c0bc5dc529ec0abb1f3f4efa18f10c3bfb837", + "class_hash": "0x52dfc0a351c1b7770289b2f14d2dfcf0d8b4b5586872efaef763105be4808be", "tag": "tamagotchi-BeastStatus", "selector": "0x7dd28052791e63bdc06d6ba2a8eca548b4580c2e83bb96c03ef0a2d84f8ffde" }, @@ -2396,4 +2400,4 @@ } ], "external_contracts": [] -} \ No newline at end of file +} diff --git a/dojo/torii-config.toml b/dojo/torii-config.toml index 7d369a01..cfcd06ae 100644 --- a/dojo/torii-config.toml +++ b/dojo/torii-config.toml @@ -1,5 +1,5 @@ # The World address to index. -world_address = "0x055ab491f46e96bfdbefab82c7ff1101bf8fd10bdb4e47c01533bc2a2a1e9e9e" +world_address = "0x02a61209988c0a784a6fe51d69875577435cc209bef7d8b121fb64c10f018d04" # Default RPC URL configuration rpc = "https://api.cartridge.gg/x/starknet/sepolia" From 0ca1630642e29988e84da4df66b0286e21f062c9 Mon Sep 17 00:00:00 2001 From: RolandoDrRobot Date: Wed, 4 Jun 2025 21:58:46 -0600 Subject: [PATCH 03/10] set new torii --- client/.env | 2 +- client/src/config/cartridgeConnector.tsx | 2 +- client/src/dojo/dojoConfig.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/.env b/client/.env index 12719e8d..6b5e665e 100644 --- a/client/.env +++ b/client/.env @@ -7,7 +7,7 @@ VITE_DEV=YOUR_DEV_VALUE VITE_PUBLIC_DEPLOY_TYPE="sepolia" VITE_PUBLIC_NODE_URL="https://api.cartridge.gg/x/starknet/sepolia" -VITE_PUBLIC_TORII="https://api.cartridge.gg/x/toriibbtest/torii" +VITE_PUBLIC_TORII="https://api.cartridge.gg/x/tamagotchitorii/torii" VITE_PUBLIC_MASTER_ADDRESS="0x04CDA1a7c67aC385Cd0a399D65c405E6539Cc3730c37Cc2C4a62b2F719CD1C0A" VITE_PUBLIC_MASTER_PRIVATE_KEY="0x056ed1031da41a9746534ff13bfd6e86e2071635b3408e49698443f3758c862e" VITE_PUBLIC_SLOT_ADDRESS="https://api.cartridge.gg/x/bytebeaststamagotchi/katana" diff --git a/client/src/config/cartridgeConnector.tsx b/client/src/config/cartridgeConnector.tsx index 8cd41ba6..1b06f3f6 100644 --- a/client/src/config/cartridgeConnector.tsx +++ b/client/src/config/cartridgeConnector.tsx @@ -149,7 +149,7 @@ const options: ControllerOptions = { colorMode, preset: "bytebeasts-tamagotchi", namespace: "tamagotchi", - slot: "toriibbtest" + slot: "tamagotchitorii" }; const cartridgeConnector = new ControllerConnector( diff --git a/client/src/dojo/dojoConfig.ts b/client/src/dojo/dojoConfig.ts index 1cfea225..930f39c0 100644 --- a/client/src/dojo/dojoConfig.ts +++ b/client/src/dojo/dojoConfig.ts @@ -14,5 +14,5 @@ export const dojoConfig = createDojoConfig({ masterAddress: VITE_PUBLIC_MASTER_ADDRESS || '0x04CDA1a7c67aC385Cd0a399D65c405E6539Cc3730c37Cc2C4a62b2F719CD1C0A', masterPrivateKey: VITE_PUBLIC_MASTER_PRIVATE_KEY || '0x056ed1031da41a9746534ff13bfd6e86e2071635b3408e49698443f3758c862e', rpcUrl: VITE_PUBLIC_NODE_URL || 'https://api.cartridge.gg/x/starknet/sepolia', - toriiUrl: VITE_PUBLIC_TORII || 'https://api.cartridge.gg/x/toriibbtest/torii', + toriiUrl: VITE_PUBLIC_TORII || 'https://api.cartridge.gg/x/tamagotchitorii/torii', }); From b6a1674c382e7473bdbf8f484c34339a2bcadc60 Mon Sep 17 00:00:00 2001 From: RolandoDrRobot Date: Wed, 4 Jun 2025 22:22:18 -0600 Subject: [PATCH 04/10] Add the vrf call and new binding attribute --- client/src/config/cartridgeConnector.tsx | 25 ++++++++++------------- client/src/dojo/bindings.ts | 4 ++++ client/src/dojo/useSystemCalls.ts | 26 ++++++++++++++++++++++-- 3 files changed, 39 insertions(+), 16 deletions(-) diff --git a/client/src/config/cartridgeConnector.tsx b/client/src/config/cartridgeConnector.tsx index 1b06f3f6..3c05ebec 100644 --- a/client/src/config/cartridgeConnector.tsx +++ b/client/src/config/cartridgeConnector.tsx @@ -4,11 +4,11 @@ import { ColorMode, SessionPolicies, ControllerOptions, } from "@cartridge/contr import { constants } from "starknet"; const { VITE_PUBLIC_DEPLOY_TYPE } = import.meta.env; -const { VITE_PUBLIC_SLOT_ADDRESS } = import.meta.env; const CONTRACT_ADDRESS_ACHIEVEMENTS = '0x6529b6a85bd7e4beaf4b8ead64b82fb115bec5a944c3b87fd35445231547fc6' const CONTRACT_ADDRESS_TAMAGOTCHI_SYSTEM = '0x51af5c277d07337a8ef50599173d4b0a10597f3c0b85acebfec4ce9b53a6509' const CONTRACT_ADDRESS_PLAYER_SYSTEM = '0x518610e4d4eda4f4086b7a7bd385a0f2fba50214cea195efcca834a6ab85f90' +const VRF_PROVIDER_ADDRESS = '0x051fea4450da9d6aee758bdeba88b2f665bcbf549d2c61421aa724e9ac0ced8f'; const policies: SessionPolicies = { contracts: { @@ -116,25 +116,22 @@ const policies: SessionPolicies = { }, ], }, + + [VRF_PROVIDER_ADDRESS]: { + methods: [ + { + name: "request_random", + entrypoint: "request_random", + description: "Allows requesting random numbers from the VRF provider" + }, + ], + }, }, } // Controller basic configuration const colorMode: ColorMode = "dark"; const theme = "bytebeasts-tamagotchi"; -const namespace = "tamagotchi"; //ensure this is correct -const slot = `bytebeasts-tamagotchi-${VITE_PUBLIC_DEPLOY_TYPE || 'dev'}`; //ensure bytebeasts-tamagotchi this is correct - -const getRpcUrl = () => { - switch (VITE_PUBLIC_DEPLOY_TYPE) { - case "mainnet": - return "https://api.cartridge.gg/x/starknet/mainnet"; - case "sepolia": - return "https://api.cartridge.gg/x/starknet/sepolia"; - default: - return VITE_PUBLIC_SLOT_ADDRESS; - } -}; const options: ControllerOptions = { // @ts-ignore diff --git a/client/src/dojo/bindings.ts b/client/src/dojo/bindings.ts index 86351c20..aa8b6e45 100644 --- a/client/src/dojo/bindings.ts +++ b/client/src/dojo/bindings.ts @@ -21,6 +21,7 @@ export interface BeastValue { // Type definition for `tamagotchi::models::beast_status::BeastStatus` struct export interface BeastStatus { beast_id: number; + player: string; is_alive: boolean; is_awake: boolean; hunger: number; @@ -33,6 +34,7 @@ export interface BeastStatus { // Type definition for `tamagotchi::models::beast_status::BeastStatusValue` struct export interface BeastStatusValue { + player: string; is_alive: boolean; is_awake: boolean; hunger: number; @@ -190,6 +192,7 @@ export const schema: SchemaType = { }, BeastStatus: { beast_id: 0, + player: "", is_alive: false, is_awake: false, hunger: 0, @@ -200,6 +203,7 @@ export const schema: SchemaType = { last_timestamp: 0, }, BeastStatusValue: { + player: "", is_alive: false, is_awake: false, hunger: 0, diff --git a/client/src/dojo/useSystemCalls.ts b/client/src/dojo/useSystemCalls.ts index c7b7deb1..3be75217 100644 --- a/client/src/dojo/useSystemCalls.ts +++ b/client/src/dojo/useSystemCalls.ts @@ -2,6 +2,11 @@ import { v4 as uuidv4 } from "uuid"; import { useAccount } from "@starknet-react/core"; import { useDojoSDK } from "@dojoengine/sdk/react"; +import { CallData } from "starknet"; + +const VRF_PROVIDER_ADDRESS = '0x051fea4450da9d6aee758bdeba88b2f665bcbf549d2c61421aa724e9ac0ced8f'; +const GAME_CONTRACT = '0x51af5c277d07337a8ef50599173d4b0a10597f3c0b85acebfec4ce9b53a6509'; + export const useSystemCalls = () => { const { useDojoStore, client } = useDojoSDK(); @@ -22,12 +27,29 @@ export const useSystemCalls = () => { * @returns {Promise} * @throws {Error} If the spawn action fails */ - const spawn = async (randomNumber:number) => { + const spawn = async (randomNumber: number) => { const transactionId = uuidv4(); try { + if (!account) return // Execute the spawn action from the client - const spawnTx = await client.game.spawnBeast(account!, randomNumber, randomNumber); + const spawnTx = await account.execute([ + // Prefix the multicall with the request_random call + { + contractAddress: VRF_PROVIDER_ADDRESS, + entrypoint: 'request_random', + calldata: CallData.compile({ + caller: GAME_CONTRACT, + source: { type: 0, address: account.address }, + }) + }, + { + contractAddress: GAME_CONTRACT, + entrypoint: 'spawn_beast' + } + ]); + + client.game.spawnBeast(account!, randomNumber, randomNumber); return { spawnTx, From eeea5832526f9a0a9e6d3878a541f1e3a27e5c8a Mon Sep 17 00:00:00 2001 From: RolandoDrRobot Date: Wed, 4 Jun 2025 22:32:14 -0600 Subject: [PATCH 05/10] set debugger --- client/dev-dist/sw.js | 2 +- client/src/components/SpawnBeast/index.tsx | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/client/dev-dist/sw.js b/client/dev-dist/sw.js index 5a1725df..7fc27c5d 100644 --- a/client/dev-dist/sw.js +++ b/client/dev-dist/sw.js @@ -82,7 +82,7 @@ define(['./workbox-20a2f87f'], (function (workbox) { 'use strict'; "revision": "3ca0b8505b4bec776b69afdba2768812" }, { "url": "index.html", - "revision": "0.lod2n68ccfg" + "revision": "0.gvea1s3ch0o" }], {}); workbox.cleanupOutdatedCaches(); workbox.registerRoute(new workbox.NavigationRoute(workbox.createHandlerBoundToURL("index.html"), { diff --git a/client/src/components/SpawnBeast/index.tsx b/client/src/components/SpawnBeast/index.tsx index b6b4f1fd..550bb7fd 100644 --- a/client/src/components/SpawnBeast/index.tsx +++ b/client/src/components/SpawnBeast/index.tsx @@ -13,7 +13,7 @@ import ProgressBar from '../ProgressBar/index.tsx'; // Hooks and Contexts import { useSystemCalls } from "../../dojo/useSystemCalls.ts"; import { usePlayer } from "../../hooks/usePlayers.tsx"; -import { useBeasts } from "../../hooks/useBeasts"; +import { useBeasts, fetchBeastsData } from "../../hooks/useBeasts"; // Types import type { @@ -95,6 +95,8 @@ const SpawnBeast: React.FC = ({ className = '' }) => { if (spawnTx && spawnTx.code === "SUCCESS") { refetch(); + const beastsData = await fetchBeastsData(); + console.log('beastsData', beastsData); setSpawnProgress({ progress: 70, message: 'Beast generated! Setting as current' }); const newBeast = myBeastsData[0]; if (newBeast) { From 4cf7dce13a94374a1b2448473387f4e9a8536165 Mon Sep 17 00:00:00 2001 From: RolandoDrRobot Date: Wed, 4 Jun 2025 22:38:00 -0600 Subject: [PATCH 06/10] remove call --- client/src/dojo/useSystemCalls.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/client/src/dojo/useSystemCalls.ts b/client/src/dojo/useSystemCalls.ts index 3be75217..303d3fc1 100644 --- a/client/src/dojo/useSystemCalls.ts +++ b/client/src/dojo/useSystemCalls.ts @@ -49,8 +49,6 @@ export const useSystemCalls = () => { } ]); - client.game.spawnBeast(account!, randomNumber, randomNumber); - return { spawnTx, }; From 73bb20b3907cc53e37b3a5a0384c655a7347e5e4 Mon Sep 17 00:00:00 2001 From: RolandoDrRobot Date: Sat, 7 Jun 2025 13:32:42 -0600 Subject: [PATCH 07/10] testing --- client/dev-dist/sw.js | 2 +- .../src/components/FlappyBeasts/flappyBeasts.tsx | 2 -- client/src/components/SkyJumpMiniGame/index.tsx | 16 ++++------------ client/src/components/SpawnBeast/index.tsx | 8 ++------ client/src/components/Tamagotchi/Play/index.tsx | 3 --- client/src/components/Twitter/ShareProgress.tsx | 2 -- client/src/dojo/useSystemCalls.ts | 4 +++- client/src/hooks/useHighScore.tsx | 2 -- 8 files changed, 10 insertions(+), 29 deletions(-) diff --git a/client/dev-dist/sw.js b/client/dev-dist/sw.js index 7fc27c5d..cdf29da8 100644 --- a/client/dev-dist/sw.js +++ b/client/dev-dist/sw.js @@ -82,7 +82,7 @@ define(['./workbox-20a2f87f'], (function (workbox) { 'use strict'; "revision": "3ca0b8505b4bec776b69afdba2768812" }, { "url": "index.html", - "revision": "0.gvea1s3ch0o" + "revision": "0.7rvs6lvb7i" }], {}); workbox.cleanupOutdatedCaches(); workbox.registerRoute(new workbox.NavigationRoute(workbox.createHandlerBoundToURL("index.html"), { diff --git a/client/src/components/FlappyBeasts/flappyBeasts.tsx b/client/src/components/FlappyBeasts/flappyBeasts.tsx index 9ec4fee0..242b5ed1 100644 --- a/client/src/components/FlappyBeasts/flappyBeasts.tsx +++ b/client/src/components/FlappyBeasts/flappyBeasts.tsx @@ -171,7 +171,6 @@ const FlappyBirdMiniGame = forwardRef(({ async () => { await client.player.updatePlayerTotalPoints(account, score); const txtest = await client.achieve.achievePlayerNewTotalPoints(account); - console.info('achievePlayerNewTotalPoints fkaooy', txtest); await client.player.updatePlayerMinigameHighestScore(account, score, 2); await client.player.addOrUpdateFoodAmount(account, foodId, foodCollected); }); @@ -218,7 +217,6 @@ const FlappyBirdMiniGame = forwardRef(({ if (score > actualHighScore) { setCurrentHighScore(score); const tx = await client.achieve.achieveFlappyBeastHighscore(account as Account, score); - console.info('tx flappy highscore', tx); } else { setCurrentHighScore(actualHighScore); } diff --git a/client/src/components/SkyJumpMiniGame/index.tsx b/client/src/components/SkyJumpMiniGame/index.tsx index 817d82bb..bc1700bd 100644 --- a/client/src/components/SkyJumpMiniGame/index.tsx +++ b/client/src/components/SkyJumpMiniGame/index.tsx @@ -94,7 +94,6 @@ const CanvasSkyJumpGame = forwardRef dojoHighScore) { setCurrentHighScore(engineFinalScore); const tx = await client.achieve.achievePlatformHighscore(account as Account, engineFinalScore); - console.info('tx sky jump achievePlatformHighscore', tx); } else { setCurrentHighScore(dojoHighScore); } @@ -198,17 +197,10 @@ const CanvasSkyJumpGame = forwardRef { - const updatePlayerTotalPoints = await client.player.updatePlayerTotalPoints(account, score); - console.info('updatePlayerTotalPoints', updatePlayerTotalPoints); - - const updatePlayerMinigameHighestScore = await client.player.updatePlayerMinigameHighestScore(account, score, GameId.SKY_JUMP); - console.info('updatePlayerMinigameHighestScore', updatePlayerMinigameHighestScore); - - const addOrUpdateFoodAmount = await client.player.addOrUpdateFoodAmount(account, foodId, foodCollected); - console.info('addOrUpdateFoodAmount', addOrUpdateFoodAmount); - - const achievePlayerNewTotalPoints = await client.achieve.achievePlayerNewTotalPoints(account); - console.info('achievePlayerNewTotalPoints', achievePlayerNewTotalPoints); + await client.player.updatePlayerTotalPoints(account, score); + await client.player.updatePlayerMinigameHighestScore(account, score, GameId.SKY_JUMP); + await client.player.addOrUpdateFoodAmount(account, foodId, foodCollected); + await client.achieve.achievePlayerNewTotalPoints(account); } ); return true; diff --git a/client/src/components/SpawnBeast/index.tsx b/client/src/components/SpawnBeast/index.tsx index 550bb7fd..2f9c9ea0 100644 --- a/client/src/components/SpawnBeast/index.tsx +++ b/client/src/components/SpawnBeast/index.tsx @@ -44,8 +44,7 @@ const SpawnBeast: React.FC = ({ className = '' }) => { ); const { myBeastsData, refetch } = useBeasts(userAddress); - console.info('myBeastsData', myBeastsData); - + // State const [state, setState] = useState({ loading: false, @@ -80,8 +79,7 @@ const SpawnBeast: React.FC = ({ className = '' }) => { if (!player) { setSpawnProgress({ progress: 20, message: 'Creating player account' }); const spawnPlayerTx = await client.player.spawnPlayer(account as Account); - console.info('spawnPlayerTx', spawnPlayerTx); - + // Esperar un momento para que se actualice el player await new Promise(resolve => setTimeout(resolve, 2000)); setSpawnProgress({ progress: 40, message: 'Player account created!' }); @@ -90,7 +88,6 @@ const SpawnBeast: React.FC = ({ className = '' }) => { setSpawnProgress({ progress: 50, message: 'Generating your beast' }); const randomBeastId = getRandomNumber(MIN_BEAST_ID, MAX_BEAST_ID); const { spawnTx } = await spawn(randomBeastId); - console.info('spawnTx', spawnTx); await new Promise(resolve => setTimeout(resolve, 2000)); if (spawnTx && spawnTx.code === "SUCCESS") { @@ -102,7 +99,6 @@ const SpawnBeast: React.FC = ({ className = '' }) => { if (newBeast) { setSpawnProgress({ progress: 90, message: 'Finalizing setup' }); const setCurrentTx = await client.player.setCurrentBeast(account!, newBeast.beast_id); - console.info('setCurrentTx', setCurrentTx); await new Promise(resolve => setTimeout(resolve, 2000)); setSpawnProgress({ progress: 100, message: 'Your beast is ready!' }); setTimeout(() => { diff --git a/client/src/components/Tamagotchi/Play/index.tsx b/client/src/components/Tamagotchi/Play/index.tsx index 200e72cb..be2b01cf 100644 --- a/client/src/components/Tamagotchi/Play/index.tsx +++ b/client/src/components/Tamagotchi/Play/index.tsx @@ -31,8 +31,6 @@ const Play: React.FC = ({ }) => { const navigate = useNavigate(); const { myScoreFlappyBird, myScoreSkyJump } = useHighScores(); - console.info('myScoreFlappyBird', myScoreFlappyBird); - console.info('myScoreSkyJump', myScoreSkyJump); const GAME_ID_MAPPING: Record = { 'doodleGame': 1, // SkyJump @@ -50,7 +48,6 @@ const Play: React.FC = ({ try { const tx = await client.achieve.achievePlayMinigame(account); - console.info('tx achievePlayMinigame', tx); handleAction( "Play", diff --git a/client/src/components/Twitter/ShareProgress.tsx b/client/src/components/Twitter/ShareProgress.tsx index f4fa7a41..a1f6583b 100644 --- a/client/src/components/Twitter/ShareProgress.tsx +++ b/client/src/components/Twitter/ShareProgress.tsx @@ -104,10 +104,8 @@ export const ShareProgress: React.FC = ({ e.stopPropagation(); if (minigameData) { const tx = await client.achieve.achieveScoreShare(account, minigameData.score); - console.info('achieveScoreShare ', tx) } else { const tx = await client.achieve.achieveBeastShare(account); - console.info('achieveBeastShare ', tx) } }} > diff --git a/client/src/dojo/useSystemCalls.ts b/client/src/dojo/useSystemCalls.ts index 303d3fc1..3d9ae160 100644 --- a/client/src/dojo/useSystemCalls.ts +++ b/client/src/dojo/useSystemCalls.ts @@ -9,7 +9,7 @@ const GAME_CONTRACT = '0x51af5c277d07337a8ef50599173d4b0a10597f3c0b85acebfec4ce9 export const useSystemCalls = () => { - const { useDojoStore, client } = useDojoSDK(); + const { useDojoStore } = useDojoSDK(); const state = useDojoStore((state) => state); const { account } = useAccount(); @@ -49,6 +49,8 @@ export const useSystemCalls = () => { } ]); + console.info(spawnTx); + return { spawnTx, }; diff --git a/client/src/hooks/useHighScore.tsx b/client/src/hooks/useHighScore.tsx index e54546ba..53af0eba 100644 --- a/client/src/hooks/useHighScore.tsx +++ b/client/src/hooks/useHighScore.tsx @@ -77,8 +77,6 @@ export const useHighScores = () => { const allScores = processHighScores(scoreEdges); setScores(allScores); - console.info('allScores', allScores); - if (userAddress) { const skyJumpScores = filterScoresByGameAndUser( allScores, From e2d7bb4dbc5c66df6bcf89198c8b2f24515718ac Mon Sep 17 00:00:00 2001 From: RolandoDrRobot Date: Sat, 7 Jun 2025 15:04:51 -0600 Subject: [PATCH 08/10] new deploy --- client/.env | 2 +- client/dev-dist/sw.js | 2 +- client/src/components/Tamagotchi/utils/fetchAge.ts | 2 +- client/src/components/Tamagotchi/utils/fetchStatus.ts | 2 +- client/src/config/cartridgeConnector.tsx | 8 ++++---- client/src/dojo/dojoConfig.ts | 2 +- client/src/dojo/manifest_dev.json | 10 +++++----- client/src/dojo/useSystemCalls.ts | 5 +++-- dojo/torii-config.toml | 2 +- 9 files changed, 18 insertions(+), 17 deletions(-) diff --git a/client/.env b/client/.env index 6b5e665e..b3688439 100644 --- a/client/.env +++ b/client/.env @@ -7,7 +7,7 @@ VITE_DEV=YOUR_DEV_VALUE VITE_PUBLIC_DEPLOY_TYPE="sepolia" VITE_PUBLIC_NODE_URL="https://api.cartridge.gg/x/starknet/sepolia" -VITE_PUBLIC_TORII="https://api.cartridge.gg/x/tamagotchitorii/torii" +VITE_PUBLIC_TORII="https://api.cartridge.gg/x/tamatorii/torii" VITE_PUBLIC_MASTER_ADDRESS="0x04CDA1a7c67aC385Cd0a399D65c405E6539Cc3730c37Cc2C4a62b2F719CD1C0A" VITE_PUBLIC_MASTER_PRIVATE_KEY="0x056ed1031da41a9746534ff13bfd6e86e2071635b3408e49698443f3758c862e" VITE_PUBLIC_SLOT_ADDRESS="https://api.cartridge.gg/x/bytebeaststamagotchi/katana" diff --git a/client/dev-dist/sw.js b/client/dev-dist/sw.js index cdf29da8..7981307e 100644 --- a/client/dev-dist/sw.js +++ b/client/dev-dist/sw.js @@ -82,7 +82,7 @@ define(['./workbox-20a2f87f'], (function (workbox) { 'use strict'; "revision": "3ca0b8505b4bec776b69afdba2768812" }, { "url": "index.html", - "revision": "0.7rvs6lvb7i" + "revision": "0.ndbvlj8i0lg" }], {}); workbox.cleanupOutdatedCaches(); workbox.registerRoute(new workbox.NavigationRoute(workbox.createHandlerBoundToURL("index.html"), { diff --git a/client/src/components/Tamagotchi/utils/fetchAge.ts b/client/src/components/Tamagotchi/utils/fetchAge.ts index 1bc3f841..40d6350d 100644 --- a/client/src/components/Tamagotchi/utils/fetchAge.ts +++ b/client/src/components/Tamagotchi/utils/fetchAge.ts @@ -3,7 +3,7 @@ import hexToDecimalArray from './hexToDecimalArray'; const fetchAge = async (account: any): Promise => { try { const response = await account?.callContract({ - contractAddress: "0x51af5c277d07337a8ef50599173d4b0a10597f3c0b85acebfec4ce9b53a6509", + contractAddress: "0x5f40f5c23253d2f4d22849880c89483df6a7f22a3f3b2fa4c88d0476a27d5de", entrypoint: "get_beast_age_with_address", calldata: [String(account?.address)], }); diff --git a/client/src/components/Tamagotchi/utils/fetchStatus.ts b/client/src/components/Tamagotchi/utils/fetchStatus.ts index 4960eaa6..bd942be1 100644 --- a/client/src/components/Tamagotchi/utils/fetchStatus.ts +++ b/client/src/components/Tamagotchi/utils/fetchStatus.ts @@ -3,7 +3,7 @@ import hexToDecimalArray from './hexToDecimalArray'; const fetchStatus = async (account: any): Promise => { try { const response = await account?.callContract({ - contractAddress: "0x51af5c277d07337a8ef50599173d4b0a10597f3c0b85acebfec4ce9b53a6509", + contractAddress: "0x5f40f5c23253d2f4d22849880c89483df6a7f22a3f3b2fa4c88d0476a27d5de", entrypoint: "get_timestamp_based_status_with_address", calldata: [String(account?.address)], }); diff --git a/client/src/config/cartridgeConnector.tsx b/client/src/config/cartridgeConnector.tsx index 3c05ebec..3a4f55bf 100644 --- a/client/src/config/cartridgeConnector.tsx +++ b/client/src/config/cartridgeConnector.tsx @@ -5,9 +5,9 @@ import { constants } from "starknet"; const { VITE_PUBLIC_DEPLOY_TYPE } = import.meta.env; -const CONTRACT_ADDRESS_ACHIEVEMENTS = '0x6529b6a85bd7e4beaf4b8ead64b82fb115bec5a944c3b87fd35445231547fc6' -const CONTRACT_ADDRESS_TAMAGOTCHI_SYSTEM = '0x51af5c277d07337a8ef50599173d4b0a10597f3c0b85acebfec4ce9b53a6509' -const CONTRACT_ADDRESS_PLAYER_SYSTEM = '0x518610e4d4eda4f4086b7a7bd385a0f2fba50214cea195efcca834a6ab85f90' +const CONTRACT_ADDRESS_ACHIEVEMENTS = '0x7b0cb70509a095f27b9d1187c433421b8cb2e731366f0ee8b27fd48dbf149fc' +const CONTRACT_ADDRESS_TAMAGOTCHI_SYSTEM = '0x5f40f5c23253d2f4d22849880c89483df6a7f22a3f3b2fa4c88d0476a27d5de' +const CONTRACT_ADDRESS_PLAYER_SYSTEM = '0x6ac1c61c0fbdeca534ab1791b138da22b20d6b3a3c82de01b2bb804d35a4756' const VRF_PROVIDER_ADDRESS = '0x051fea4450da9d6aee758bdeba88b2f665bcbf549d2c61421aa724e9ac0ced8f'; const policies: SessionPolicies = { @@ -146,7 +146,7 @@ const options: ControllerOptions = { colorMode, preset: "bytebeasts-tamagotchi", namespace: "tamagotchi", - slot: "tamagotchitorii" + slot: "tamatorii" }; const cartridgeConnector = new ControllerConnector( diff --git a/client/src/dojo/dojoConfig.ts b/client/src/dojo/dojoConfig.ts index 930f39c0..88dd622b 100644 --- a/client/src/dojo/dojoConfig.ts +++ b/client/src/dojo/dojoConfig.ts @@ -14,5 +14,5 @@ export const dojoConfig = createDojoConfig({ masterAddress: VITE_PUBLIC_MASTER_ADDRESS || '0x04CDA1a7c67aC385Cd0a399D65c405E6539Cc3730c37Cc2C4a62b2F719CD1C0A', masterPrivateKey: VITE_PUBLIC_MASTER_PRIVATE_KEY || '0x056ed1031da41a9746534ff13bfd6e86e2071635b3408e49698443f3758c862e', rpcUrl: VITE_PUBLIC_NODE_URL || 'https://api.cartridge.gg/x/starknet/sepolia', - toriiUrl: VITE_PUBLIC_TORII || 'https://api.cartridge.gg/x/tamagotchitorii/torii', + toriiUrl: VITE_PUBLIC_TORII || 'https://api.cartridge.gg/x/tamatorii/torii', }); diff --git a/client/src/dojo/manifest_dev.json b/client/src/dojo/manifest_dev.json index b1b440c8..5d362e61 100644 --- a/client/src/dojo/manifest_dev.json +++ b/client/src/dojo/manifest_dev.json @@ -1,8 +1,8 @@ { "world": { "class_hash": "0x7c9469d45a9cdbab775035afb48e1fa73fb35ab059fcb9dfb0a301aa973e783", - "address": "0x2a61209988c0a784a6fe51d69875577435cc209bef7d8b121fb64c10f018d04", - "seed": "tamagotchi18", + "address": "0x7220cd7725010ad17892773ffcca9347fcd2c899171a4df67b740196ec0a1d6", + "seed": "tamagotchi19", "name": "ByteBeasts Tamagotchi", "entrypoints": [ "uuid", @@ -1312,7 +1312,7 @@ }, "contracts": [ { - "address": "0x6529b6a85bd7e4beaf4b8ead64b82fb115bec5a944c3b87fd35445231547fc6", + "address": "0x7b0cb70509a095f27b9d1187c433421b8cb2e731366f0ee8b27fd48dbf149fc", "class_hash": "0x2ae3f43544bc745744f339fffc5390aac05e3a99f16aadba70859ecd5b46116", "abi": [ { @@ -1614,7 +1614,7 @@ ] }, { - "address": "0x51af5c277d07337a8ef50599173d4b0a10597f3c0b85acebfec4ce9b53a6509", + "address": "0x5f40f5c23253d2f4d22849880c89483df6a7f22a3f3b2fa4c88d0476a27d5de", "class_hash": "0x52a9790e907235c127df5560cc2f89064188a5639fd1a0cd40fc9b9e9a646d9", "abi": [ { @@ -2069,7 +2069,7 @@ ] }, { - "address": "0x518610e4d4eda4f4086b7a7bd385a0f2fba50214cea195efcca834a6ab85f90", + "address": "0x6ac1c61c0fbdeca534ab1791b138da22b20d6b3a3c82de01b2bb804d35a4756", "class_hash": "0x24eeedaa48d3c3de399ec22d854f14c3533170902e21c18c8fc6e3bb8187a0d", "abi": [ { diff --git a/client/src/dojo/useSystemCalls.ts b/client/src/dojo/useSystemCalls.ts index 3d9ae160..9df112e7 100644 --- a/client/src/dojo/useSystemCalls.ts +++ b/client/src/dojo/useSystemCalls.ts @@ -5,7 +5,7 @@ import { useDojoSDK } from "@dojoengine/sdk/react"; import { CallData } from "starknet"; const VRF_PROVIDER_ADDRESS = '0x051fea4450da9d6aee758bdeba88b2f665bcbf549d2c61421aa724e9ac0ced8f'; -const GAME_CONTRACT = '0x51af5c277d07337a8ef50599173d4b0a10597f3c0b85acebfec4ce9b53a6509'; +const GAME_CONTRACT = '0x5f40f5c23253d2f4d22849880c89483df6a7f22a3f3b2fa4c88d0476a27d5de'; export const useSystemCalls = () => { @@ -45,7 +45,8 @@ export const useSystemCalls = () => { }, { contractAddress: GAME_CONTRACT, - entrypoint: 'spawn_beast' + entrypoint: 'spawn_beast', + calldata: [randomNumber, randomNumber] } ]); diff --git a/dojo/torii-config.toml b/dojo/torii-config.toml index cfcd06ae..f362d6de 100644 --- a/dojo/torii-config.toml +++ b/dojo/torii-config.toml @@ -1,5 +1,5 @@ # The World address to index. -world_address = "0x02a61209988c0a784a6fe51d69875577435cc209bef7d8b121fb64c10f018d04" +world_address = "0x07220cd7725010ad17892773ffcca9347fcd2c899171a4df67b740196ec0a1d6" # Default RPC URL configuration rpc = "https://api.cartridge.gg/x/starknet/sepolia" From dc94cb30149a9ac940aa3fa634748d916a340773 Mon Sep 17 00:00:00 2001 From: RolandoDrRobot Date: Sat, 7 Jun 2025 15:28:40 -0600 Subject: [PATCH 09/10] update useSystemCalls --- client/dev-dist/sw.js | 2 +- client/src/dojo/useSystemCalls.ts | 97 ++++++++++++++++--------------- 2 files changed, 52 insertions(+), 47 deletions(-) diff --git a/client/dev-dist/sw.js b/client/dev-dist/sw.js index 7981307e..1b48f256 100644 --- a/client/dev-dist/sw.js +++ b/client/dev-dist/sw.js @@ -82,7 +82,7 @@ define(['./workbox-20a2f87f'], (function (workbox) { 'use strict'; "revision": "3ca0b8505b4bec776b69afdba2768812" }, { "url": "index.html", - "revision": "0.ndbvlj8i0lg" + "revision": "0.trl9dgsmccg" }], {}); workbox.cleanupOutdatedCaches(); workbox.registerRoute(new workbox.NavigationRoute(workbox.createHandlerBoundToURL("index.html"), { diff --git a/client/src/dojo/useSystemCalls.ts b/client/src/dojo/useSystemCalls.ts index 9df112e7..07b3efd3 100644 --- a/client/src/dojo/useSystemCalls.ts +++ b/client/src/dojo/useSystemCalls.ts @@ -2,71 +2,76 @@ import { v4 as uuidv4 } from "uuid"; import { useAccount } from "@starknet-react/core"; import { useDojoSDK } from "@dojoengine/sdk/react"; -import { CallData } from "starknet"; const VRF_PROVIDER_ADDRESS = '0x051fea4450da9d6aee758bdeba88b2f665bcbf549d2c61421aa724e9ac0ced8f'; const GAME_CONTRACT = '0x5f40f5c23253d2f4d22849880c89483df6a7f22a3f3b2fa4c88d0476a27d5de'; - export const useSystemCalls = () => { - const { useDojoStore } = useDojoSDK(); + const { useDojoStore, provider } = useDojoSDK(); const state = useDojoStore((state) => state); - const { account } = useAccount(); - /** - * Generates a unique entity ID based on the current account address. - * @returns {string} The generated entity ID - */ - // const generateEntityId = () => { - // return getEntityIdFromKeys([BigInt(account!.address)]); - // }; - - /** - * Spawns a new entity with initial moves and handles optimistic updates. - * @returns {Promise} - * @throws {Error} If the spawn action fails - */ - const spawn = async (randomNumber: number) => { + const handleTransaction = async ( + action: () => Promise<{ transaction_hash: string }>, + successMessage: string + ) => { const transactionId = uuidv4(); try { - if (!account) return - // Execute the spawn action from the client - const spawnTx = await account.execute([ - // Prefix the multicall with the request_random call - { - contractAddress: VRF_PROVIDER_ADDRESS, - entrypoint: 'request_random', - calldata: CallData.compile({ - caller: GAME_CONTRACT, - source: { type: 0, address: account.address }, - }) - }, - { - contractAddress: GAME_CONTRACT, - entrypoint: 'spawn_beast', - calldata: [randomNumber, randomNumber] - } - ]); + // Execute the transaction + const { transaction_hash } = await action(); + console.log("transaction_hash", transaction_hash); - console.info(spawnTx); + // Wait for completion + const transaction = await account?.waitForTransaction(transaction_hash, { + retryInterval: 200, + }); + + // Confirm the transaction if successful + state.confirmTransaction(transactionId); - return { - spawnTx, - }; + return transaction; } catch (error) { // Revert the optimistic update if an error occurs state.revertOptimisticUpdate(transactionId); - console.error("Error executing spawn:", error); + console.error("Error executing transaction:", error); throw error; - } finally { - // Confirm the transaction if successful - state.confirmTransaction(transactionId); } }; - return { - spawn, + const spawn = async (randomNumber: number) => { + if (!account || !provider) return; + + return await handleTransaction( + async () => { + const spawnTx = await provider.execute( + account as any, + [ + { + contractAddress: VRF_PROVIDER_ADDRESS, + entrypoint: 'request_random', + calldata: [ + GAME_CONTRACT, // caller + 0, // type: 0 para Source::Nonce + account.address // address para Source::Nonce + ] + }, + { + contractName: "game", + entrypoint: "spawn_beast", + calldata: [randomNumber, randomNumber] // El contrato usará consume_random internamente + } + ], + "tamagotchi", // namespace que ya tienes configurado + { maxFee: 1e15 } + ); + console.info('spawnTx roloooo', spawnTx); + + return spawnTx; + }, + "Beast spawned successfully!" + ); }; + + return { spawn }; }; From 7e3006f5bd4e50284c38f68a09db16cbac0c5de1 Mon Sep 17 00:00:00 2001 From: RolandoDrRobot Date: Sat, 7 Jun 2025 19:57:38 -0600 Subject: [PATCH 10/10] update addresses --- .../components/Tamagotchi/utils/fetchAge.ts | 2 +- .../Tamagotchi/utils/fetchStatus.ts | 2 +- client/src/config/cartridgeConnector.tsx | 26 +++++++++---------- client/src/dojo/useSystemCalls.ts | 2 +- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/client/src/components/Tamagotchi/utils/fetchAge.ts b/client/src/components/Tamagotchi/utils/fetchAge.ts index 40d6350d..840e2fcb 100644 --- a/client/src/components/Tamagotchi/utils/fetchAge.ts +++ b/client/src/components/Tamagotchi/utils/fetchAge.ts @@ -3,7 +3,7 @@ import hexToDecimalArray from './hexToDecimalArray'; const fetchAge = async (account: any): Promise => { try { const response = await account?.callContract({ - contractAddress: "0x5f40f5c23253d2f4d22849880c89483df6a7f22a3f3b2fa4c88d0476a27d5de", + contractAddress: "0x58971d723d0100ae8393550f9166c9dad9b79799a48fc31f0d9684ef556dda9", entrypoint: "get_beast_age_with_address", calldata: [String(account?.address)], }); diff --git a/client/src/components/Tamagotchi/utils/fetchStatus.ts b/client/src/components/Tamagotchi/utils/fetchStatus.ts index bd942be1..7d0690c7 100644 --- a/client/src/components/Tamagotchi/utils/fetchStatus.ts +++ b/client/src/components/Tamagotchi/utils/fetchStatus.ts @@ -3,7 +3,7 @@ import hexToDecimalArray from './hexToDecimalArray'; const fetchStatus = async (account: any): Promise => { try { const response = await account?.callContract({ - contractAddress: "0x5f40f5c23253d2f4d22849880c89483df6a7f22a3f3b2fa4c88d0476a27d5de", + contractAddress: "0x58971d723d0100ae8393550f9166c9dad9b79799a48fc31f0d9684ef556dda9", entrypoint: "get_timestamp_based_status_with_address", calldata: [String(account?.address)], }); diff --git a/client/src/config/cartridgeConnector.tsx b/client/src/config/cartridgeConnector.tsx index 3a4f55bf..3a5489f0 100644 --- a/client/src/config/cartridgeConnector.tsx +++ b/client/src/config/cartridgeConnector.tsx @@ -5,9 +5,9 @@ import { constants } from "starknet"; const { VITE_PUBLIC_DEPLOY_TYPE } = import.meta.env; -const CONTRACT_ADDRESS_ACHIEVEMENTS = '0x7b0cb70509a095f27b9d1187c433421b8cb2e731366f0ee8b27fd48dbf149fc' -const CONTRACT_ADDRESS_TAMAGOTCHI_SYSTEM = '0x5f40f5c23253d2f4d22849880c89483df6a7f22a3f3b2fa4c88d0476a27d5de' -const CONTRACT_ADDRESS_PLAYER_SYSTEM = '0x6ac1c61c0fbdeca534ab1791b138da22b20d6b3a3c82de01b2bb804d35a4756' +const CONTRACT_ADDRESS_ACHIEVEMENTS = '0x1005116a48c9a8f7a6c946091e64dc8ced37962dc2bbb74355868229307c20d' +const CONTRACT_ADDRESS_TAMAGOTCHI_SYSTEM = '0x58971d723d0100ae8393550f9166c9dad9b79799a48fc31f0d9684ef556dda9' +const CONTRACT_ADDRESS_PLAYER_SYSTEM = '0x6b7b30fcd29c41bca831b87db67e3c8af2abb374dc2fabbbf09f4744aa22988' const VRF_PROVIDER_ADDRESS = '0x051fea4450da9d6aee758bdeba88b2f665bcbf549d2c61421aa724e9ac0ced8f'; const policies: SessionPolicies = { @@ -25,7 +25,7 @@ const policies: SessionPolicies = { { name: "play", entrypoint: "play" }, { name: "revive", entrypoint: "revive" }, { name: "sleep", entrypoint: "sleep" }, - { name: "spawn_beast", entrypoint: "spawn_beast" }, + // { name: "spawn_beast", entrypoint: "spawn_beast" }, { name: "update_beast", entrypoint: "update_beast" }, { name: "update_food_amount", entrypoint: "update_food_amount" }, ], @@ -117,15 +117,15 @@ const policies: SessionPolicies = { ], }, - [VRF_PROVIDER_ADDRESS]: { - methods: [ - { - name: "request_random", - entrypoint: "request_random", - description: "Allows requesting random numbers from the VRF provider" - }, - ], - }, + // [VRF_PROVIDER_ADDRESS]: { + // methods: [ + // { + // name: "request_random", + // entrypoint: "request_random", + // description: "Allows requesting random numbers from the VRF provider" + // }, + // ], + // }, }, } diff --git a/client/src/dojo/useSystemCalls.ts b/client/src/dojo/useSystemCalls.ts index 07b3efd3..b54b4c34 100644 --- a/client/src/dojo/useSystemCalls.ts +++ b/client/src/dojo/useSystemCalls.ts @@ -4,7 +4,7 @@ import { useAccount } from "@starknet-react/core"; import { useDojoSDK } from "@dojoengine/sdk/react"; const VRF_PROVIDER_ADDRESS = '0x051fea4450da9d6aee758bdeba88b2f665bcbf549d2c61421aa724e9ac0ced8f'; -const GAME_CONTRACT = '0x5f40f5c23253d2f4d22849880c89483df6a7f22a3f3b2fa4c88d0476a27d5de'; +const GAME_CONTRACT = '0x58971d723d0100ae8393550f9166c9dad9b79799a48fc31f0d9684ef556dda9'; export const useSystemCalls = () => { const { useDojoStore, provider } = useDojoSDK();