diff --git a/scripts/default_auth.sh b/scripts/default_auth.sh index a386b1bc1..697a1a0f7 100755 --- a/scripts/default_auth.sh +++ b/scripts/default_auth.sh @@ -18,7 +18,7 @@ export GAME_ADDRESS=$(cat ./target/dev/manifest.json | jq -r '.contracts[] | sel export PAPER_MOCK_ADDRESS=$(cat ./target/dev/manifest.json | jq -r '.contracts[] | select(.name == "rollyourown::_mocks::paper_mock::paper_mock" ).address') -export TREASURY_ADDRESS=$PAPER_MOCK_ADDRESS; +export TREASURY_ADDRESS="0xe29882a1fcba1e7e10cad46212257fea5c752a4f9b1b1ec683c503a2cf5c8a"; echo "---------------------------------------------------------------------------" echo profile : $PROFILE diff --git a/web/src/components/layout/Header.tsx b/web/src/components/layout/Header.tsx index af5b0956d..6d717a1de 100644 --- a/web/src/components/layout/Header.tsx +++ b/web/src/components/layout/Header.tsx @@ -13,6 +13,7 @@ import { ProfileLink } from "../pages/profile/Profile"; import { CashIndicator, DayIndicator, HealthIndicator } from "../player"; import { Burners } from "../wallet/Burners"; import { ChainSelector } from "../wallet/ChainSelector"; +import { Predeployed } from "../wallet/Predeployed"; interface HeaderProps { back?: boolean; @@ -48,6 +49,7 @@ export const Header = observer(({ back }: HeaderProps) => { + {/* {!game && ( <> diff --git a/web/src/components/wallet/Burners.tsx b/web/src/components/wallet/Burners.tsx index ed972f35b..b1c7151b7 100644 --- a/web/src/components/wallet/Burners.tsx +++ b/web/src/components/wallet/Burners.tsx @@ -1,12 +1,19 @@ import { useDojoContext } from "@/dojo/hooks"; import { Button, Menu, MenuButton, MenuList } from "@chakra-ui/react"; +import { useAccount, useConnect } from "@starknet-react/core"; import { Wallet } from "../icons/archive"; import { BurnerManagerUi } from "./ui/BurnerManagerUi"; export const Burners = () => { const { burnerManager } = useDojoContext(); + const { connector } = useConnect(); + const { account } = useAccount(); + if (!burnerManager) return null; + if (!account) return null; + if (!connector) return null; + if (connector?.id !== "dojoburner") return null; return ( }*/> diff --git a/web/src/components/wallet/Connect.tsx b/web/src/components/wallet/Connect.tsx index efff557a5..c5aac202b 100644 --- a/web/src/components/wallet/Connect.tsx +++ b/web/src/components/wallet/Connect.tsx @@ -26,7 +26,6 @@ export const frenlyAddress = (address: string) => { export const Connect = ({ ...props }) => { const { account, address, status } = useAccount(); - const { connect, connectors, connector } = useConnect(); const { disconnect } = useDisconnect(); @@ -196,13 +195,15 @@ const ConnectModal = ({ {connectors.map((connector) => { const isBurner = connector.id === "dojoburner"; - if (isBurner && !isKatana) { - // burner not on katana + const isPredeployed = connector.id === "dojopredeployed"; + + if (!isKatana && (isBurner || isPredeployed)) { + // burner or predeployed not on katana return null; } - if (!isBurner && isKatana) { - // not burner on katana + if (isKatana && !(isBurner || isPredeployed )) { + // not burner or predeployed on katana return null; } diff --git a/web/src/components/wallet/Predeployed.tsx b/web/src/components/wallet/Predeployed.tsx new file mode 100644 index 000000000..fd40d7a74 --- /dev/null +++ b/web/src/components/wallet/Predeployed.tsx @@ -0,0 +1,26 @@ +import { useDojoContext } from "@/dojo/hooks"; +import { Button, Menu, MenuButton, MenuList } from "@chakra-ui/react"; +import { useAccount, useConnect } from "@starknet-react/core"; +import { Wallet } from "../icons/archive"; +import { PredeployedManagerUi } from "./ui/PredeployedManagerUi"; + +export const Predeployed = () => { + const { predeployedManager } = useDojoContext(); + const { connector, isConnected } = useConnect(); + const { account } = useAccount(); + + if (!predeployedManager) return null; + if (!account) return null; + if (!connector) return null; + if (connector?.id !== "dojopredeployed") return null; + return ( + + }*/> + + + + + + + ); +}; diff --git a/web/src/components/wallet/ui/BurnerManagerUi.tsx b/web/src/components/wallet/ui/BurnerManagerUi.tsx index 45d569f8b..157dd67d6 100644 --- a/web/src/components/wallet/ui/BurnerManagerUi.tsx +++ b/web/src/components/wallet/ui/BurnerManagerUi.tsx @@ -53,14 +53,16 @@ export const BurnerManagerUi = observer(({ burnerManager }: { burnerManager?: Bu burnerManager.delete(burner.address); setRefresher(!refresher); - playSound(Sounds.Magnum357) + playSound(Sounds.Magnum357); - // force connect active wallet - disconnect(); - connect({ connector }); + // force connect active wallet + disconnect(); + connect({ connector }); }; if (!burnerManager) return null; + if (!connector) return null; + if (connector?.id !== "dojoburner") return null; return ( diff --git a/web/src/components/wallet/ui/PredeployedManagerUi.tsx b/web/src/components/wallet/ui/PredeployedManagerUi.tsx new file mode 100644 index 000000000..d9000780c --- /dev/null +++ b/web/src/components/wallet/ui/PredeployedManagerUi.tsx @@ -0,0 +1,70 @@ +import { HStack, List, ListItem, Text, VStack } from "@chakra-ui/react"; +import { Predeployed, PredeployedManager } from "@dojoengine/create-burner"; +import { useConnect, useDisconnect } from "@starknet-react/core"; +import { observer } from "mobx-react-lite"; +import { useEffect, useState } from "react"; +import { frenlyAddress } from "../Connect"; + +export const PredeployedManagerUi = observer(({ predeployedManager }: { predeployedManager?: PredeployedManager }) => { + const { connect, connector } = useConnect(); + const { disconnect } = useDisconnect(); + + const [isDeploying, setIsDeploying] = useState(false); + const [refresher, setRefresher] = useState(false); + const [predeployed, setPredeployed] = useState([]); + + useEffect(() => { + if (!predeployedManager) return; + const predeployed = predeployedManager.list(); + setPredeployed(predeployed); + }, [predeployedManager, predeployedManager?.chainId, refresher]); + + const onSelect = (burner: Predeployed) => { + if (!predeployedManager) return; + predeployedManager.select(burner.address); + setRefresher(!refresher); + + // force connect active wallet + disconnect(); + connect({ connector }); + }; + + + if (!predeployedManager) return null; + if( !connector ) return null; + if( connector && connector?.id !== "dojopredeployed") return null; + + return ( + + <> + {predeployed.length === 0 && No predeployed!} + {predeployed.length > 0 && ( + <> + + {predeployed.map((predeployed: Predeployed, idx: number) => { + return ( + + + onSelect(predeployed)}> + {frenlyAddress(predeployed.address)} ({predeployed.name}) + + + + ); + })} + + + )} + + + + ); +}); diff --git a/web/src/dojo/context/DojoContext.tsx b/web/src/dojo/context/DojoContext.tsx index 042d27128..afe9de342 100644 --- a/web/src/dojo/context/DojoContext.tsx +++ b/web/src/dojo/context/DojoContext.tsx @@ -1,5 +1,10 @@ -import { BurnerManager, DojoBurnerStarknetWindowObject } from "@dojoengine/create-burner"; -import { ReactNode, createContext, useContext, useEffect, useMemo, useState } from "react"; +import { + BurnerManager, + PredeployedManager, + useBurnerWindowObject, + usePredeployedWindowObject +} from "@dojoengine/create-burner"; +import { ReactNode, createContext, useContext, useEffect, useMemo } from "react"; import { QueryClientProvider } from "react-query"; import { Account, AccountInterface } from "starknet"; import { DojoChainsResult, useDojoChains } from "../hooks/useDojoChains"; @@ -13,6 +18,7 @@ interface DojoContextType { clients: DojoClientsResult; masterAccount?: AccountInterface; burnerManager?: BurnerManager; + predeployedManager?: PredeployedManager; configStore: ConfigStoreClass; gameStore: GameStoreClass; } @@ -29,7 +35,6 @@ export const DojoContextProvider = ({ const currentValue = useContext(DojoContext); if (currentValue) throw new Error("DojoProvider can only be used once"); - const [snWindowObjectInitialized, setSnWindowObjectInitialized] = useState(false); const defaultChain = process.env.NODE_ENV === "production" ? dojoContextConfig.KATANA_SLOT_420 : dojoContextConfig.KATANA; @@ -56,22 +61,18 @@ export const DojoContextProvider = ({ }); }, [masterAccount, selectedChain.accountClassHash, rpcProvider]); - useEffect(() => { - const init_async = async () => { - if (window.starknet_dojoburner && burnerManager) { - try { - // initialize burnerManager - await burnerManager.init(); - // setBurnerManager - (window.starknet_dojoburner as DojoBurnerStarknetWindowObject).setBurnerManager(burnerManager); - } catch (e: any) { - console.log(e); - } - } - setSnWindowObjectInitialized(true); - }; - init_async(); - }, [burnerManager]); + const predeployedManager = useMemo(() => { + if (!selectedChain.predeployedAccounts || selectedChain.predeployedAccounts.length === 0) return undefined; + // console.log("new BurnerManager"); + + return new PredeployedManager({ + rpcProvider: rpcProvider, + predeployedAccounts: selectedChain.predeployedAccounts, + }); + }, [rpcProvider, selectedChain.predeployedAccounts]); + + const { isInitialized: burnerSWOInitialized} = useBurnerWindowObject(burnerManager); + const { isInitialized: predeployedSWOInitialized} = usePredeployedWindowObject(predeployedManager); const configStore = useMemo(() => { return new ConfigStoreClass({ @@ -93,7 +94,8 @@ export const DojoContextProvider = ({ configStore.init(); }, [configStore]); - if (!snWindowObjectInitialized) return null; + + if (!(burnerSWOInitialized && predeployedSWOInitialized)) return null; return ( { - // initializeInPage(); - // }, []); - - useBurnerWindowObject(); - return ( <> diff --git a/web/src/pages/admin.tsx b/web/src/pages/admin.tsx index e963f536c..a8cc47808 100644 --- a/web/src/pages/admin.tsx +++ b/web/src/pages/admin.tsx @@ -136,7 +136,7 @@ const TreasuryClaimCard = observer(() => { PAPER BALANCE - + PAPER CLAIMABLE