diff --git a/packages/create-dubhe/package.json b/packages/create-dubhe/package.json index fbbbe9626..b5037f8a2 100644 --- a/packages/create-dubhe/package.json +++ b/packages/create-dubhe/package.json @@ -1,6 +1,6 @@ { "name": "create-dubhe", - "version": "0.0.7", + "version": "0.0.8", "type": "module", "license": "MIT", "author": "team@obelisk.build", diff --git a/packages/create-dubhe/template/101/rooch-template/package.json b/packages/create-dubhe/template/101/rooch-template/package.json index e2ae46e43..9110c1769 100644 --- a/packages/create-dubhe/template/101/rooch-template/package.json +++ b/packages/create-dubhe/template/101/rooch-template/package.json @@ -39,6 +39,7 @@ "react-dom": "18.1.0", "react-select": "^5.4.0", "swiper": "^9.2.4", + "sonner": "^1.5.0", "chalk": "^4.1.2" }, "devDependencies": { diff --git a/packages/create-dubhe/template/101/rooch-template/scripts/generateAccount.ts b/packages/create-dubhe/template/101/rooch-template/scripts/generateAccount.ts index 56aff7980..03c48773b 100644 --- a/packages/create-dubhe/template/101/rooch-template/scripts/generateAccount.ts +++ b/packages/create-dubhe/template/101/rooch-template/scripts/generateAccount.ts @@ -24,8 +24,10 @@ async function generateAccount() { export const ACCOUNT = '${keypair.getRoochAddress().toHexAddress()}'; `, ); - - console.log(`Using existing Account: ${keypair.getRoochAddress().toHexAddress()}`); + console.log(`Using existing account:`); + console.log(`Rooch Bech32 address: ${keypair.getRoochAddress().toStr()}`); + console.log(`Rooch Hex address: ${keypair.getRoochAddress().toHexAddress()}`); + console.log(`Bitcoin address: ${keypair.getBitcoinAddress().toStr()}`); return; } } catch (error) { @@ -49,7 +51,10 @@ export const ACCOUNT = '${keypair.getRoochAddress().toHexAddress()}'; `, ); - console.log(`Generate new Account: ${keypair.getRoochAddress().toHexAddress()}`); + console.log(`Generate new Account:`); + console.log(`Rooch Bech32 address: ${keypair.getRoochAddress().toStr()}`); + console.log(`Rooch Hex address: ${keypair.getRoochAddress().toHexAddress()}`); + console.log(`Bitcoin address: ${keypair.getBitcoinAddress().toStr()}`); } generateAccount(); diff --git a/packages/create-dubhe/template/101/rooch-template/src/pages/_app.tsx b/packages/create-dubhe/template/101/rooch-template/src/pages/_app.tsx index 4d48a48f9..9650cc99e 100644 --- a/packages/create-dubhe/template/101/rooch-template/src/pages/_app.tsx +++ b/packages/create-dubhe/template/101/rooch-template/src/pages/_app.tsx @@ -1,9 +1,15 @@ import 'tailwindcss/tailwind.css'; import '../css/font-awesome.css'; import type { AppProps } from 'next/app'; +import { Toaster } from 'sonner'; function MyApp({ Component, pageProps }: AppProps) { - return ; + return ( + <> + + + + ); } export default MyApp; diff --git a/packages/create-dubhe/template/101/rooch-template/src/pages/home/index.tsx b/packages/create-dubhe/template/101/rooch-template/src/pages/home/index.tsx index 722cfab9c..4f0937195 100644 --- a/packages/create-dubhe/template/101/rooch-template/src/pages/home/index.tsx +++ b/packages/create-dubhe/template/101/rooch-template/src/pages/home/index.tsx @@ -1,10 +1,11 @@ -import { loadMetadata, Dubhe, Transaction } from '@0xobelisk/rooch-client'; +import { loadMetadata, Dubhe, Transaction, NetworkType } from '@0xobelisk/rooch-client'; import { useEffect, useState } from 'react'; import { useAtom } from 'jotai'; import { Value } from '../../jotai'; import { useRouter } from 'next/router'; import { NETWORK, PACKAGE_ID } from '../../chain/config'; import { PRIVATEKEY } from '../../chain/key'; +import { toast } from 'sonner'; const Home = () => { const router = useRouter(); @@ -43,10 +44,18 @@ const Home = () => { if (response.execution_info.status.type == 'executed') { setTimeout(async () => { await query_counter_value(); + toast('Transfer Successful', { + description: new Date().toUTCString(), + action: { + label: 'Check in Explorer', + onClick: () => window.open(`https://roochscan.io/tx/${response.execution_info.tx_hash}`, '_blank'), + }, + }); setLoading(false); }, 200); } } catch (error) { + toast.error('Transaction failed. Please try again.'); setLoading(false); console.error(error); } diff --git a/packages/create-dubhe/template/101/sui-template/package.json b/packages/create-dubhe/template/101/sui-template/package.json index 4ea10dc02..d374f50e5 100644 --- a/packages/create-dubhe/template/101/sui-template/package.json +++ b/packages/create-dubhe/template/101/sui-template/package.json @@ -41,6 +41,7 @@ "react-dom": "18.1.0", "react-select": "^5.4.0", "swiper": "^9.2.4", + "sonner": "^1.5.0", "chalk": "^4.1.2" }, "devDependencies": { diff --git a/packages/create-dubhe/template/101/sui-template/src/pages/_app.tsx b/packages/create-dubhe/template/101/sui-template/src/pages/_app.tsx index 4d48a48f9..9650cc99e 100644 --- a/packages/create-dubhe/template/101/sui-template/src/pages/_app.tsx +++ b/packages/create-dubhe/template/101/sui-template/src/pages/_app.tsx @@ -1,9 +1,15 @@ import 'tailwindcss/tailwind.css'; import '../css/font-awesome.css'; import type { AppProps } from 'next/app'; +import { Toaster } from 'sonner'; function MyApp({ Component, pageProps }: AppProps) { - return ; + return ( + <> + + + + ); } export default MyApp; diff --git a/packages/create-dubhe/template/101/sui-template/src/pages/home/index.tsx b/packages/create-dubhe/template/101/sui-template/src/pages/home/index.tsx index 45f4eded9..0f9e2129a 100644 --- a/packages/create-dubhe/template/101/sui-template/src/pages/home/index.tsx +++ b/packages/create-dubhe/template/101/sui-template/src/pages/home/index.tsx @@ -1,10 +1,31 @@ -import { loadMetadata, Dubhe, Transaction, TransactionResult, DevInspectResults } from '@0xobelisk/sui-client'; +import { + loadMetadata, + Dubhe, + Transaction, + TransactionResult, + DevInspectResults, + NetworkType, +} from '@0xobelisk/sui-client'; import { useEffect, useState } from 'react'; import { useAtom } from 'jotai'; import { Value } from '../../jotai'; import { useRouter } from 'next/router'; import { Counter_Object_Id, NETWORK, PACKAGE_ID } from '../../chain/config'; import { PRIVATEKEY } from '../../chain/key'; +import { toast } from 'sonner'; + +function getExplorerUrl(network: NetworkType, digest: string) { + switch (network) { + case 'testnet': + return `https://explorer.polymedia.app/txblock/${digest}?network=${network}`; + case 'mainnet': + return `https://suiscan.xyz/tx/${digest}`; + case 'devnet': + return `https://explorer.polymedia.app/txblock/${digest}?network=${network}`; + case 'localnet': + return `https://explorer.polymedia.app/txblock/${digest}?network=local`; + } +} const Home = () => { const router = useRouter(); @@ -19,11 +40,10 @@ const Home = () => { metadata: metadata, }); const tx = new Transaction(); - console.log('counterObjectId:', Counter_Object_Id); const query_value = (await dubhe.query.counter_schema.get_value(tx, [ tx.object(Counter_Object_Id), ])) as DevInspectResults; - console.log(dubhe.view(query_value)[0]); + console.log('Counter value:', dubhe.view(query_value)[0]); setValue(dubhe.view(query_value)[0]); }; @@ -43,10 +63,20 @@ const Home = () => { if (response.effects.status.status == 'success') { setTimeout(async () => { await query_counter_value(); + console.log(response); + console.log(response.digest); + toast('Transfer Successful', { + description: new Date().toUTCString(), + action: { + label: 'Check in Explorer', + onClick: () => window.open(getExplorerUrl(NETWORK, response.digest), '_blank'), + }, + }); setLoading(false); }, 200); } } catch (error) { + toast.error('Transaction failed. Please try again.'); setLoading(false); console.error(error); } diff --git a/packages/create-dubhe/template/101/sui-template/src/pages/index.tsx b/packages/create-dubhe/template/101/sui-template/src/pages/index.tsx index e93f82833..ccb75f740 100644 --- a/packages/create-dubhe/template/101/sui-template/src/pages/index.tsx +++ b/packages/create-dubhe/template/101/sui-template/src/pages/index.tsx @@ -1,14 +1,12 @@ import type { NextPage } from 'next'; -import Home from "./home"; +import Home from './home'; const IndexPage: NextPage = () => { return ( -
- -
- ) -} - -export default IndexPage - +
+ +
+ ); +}; +export default IndexPage; diff --git a/packages/create-dubhe/template/nextjs/sui-template/package.json b/packages/create-dubhe/template/nextjs/sui-template/package.json index ea7454c76..cec01cc36 100644 --- a/packages/create-dubhe/template/nextjs/sui-template/package.json +++ b/packages/create-dubhe/template/nextjs/sui-template/package.json @@ -43,6 +43,7 @@ "react-dom": "18.1.0", "react-select": "^5.4.0", "swiper": "^9.2.4", + "sonner": "^1.5.0", "chalk": "^4.1.2" }, "devDependencies": { diff --git a/packages/create-dubhe/template/nextjs/sui-template/src/pages/_app.tsx b/packages/create-dubhe/template/nextjs/sui-template/src/pages/_app.tsx index 030db2edc..99c35016e 100644 --- a/packages/create-dubhe/template/nextjs/sui-template/src/pages/_app.tsx +++ b/packages/create-dubhe/template/nextjs/sui-template/src/pages/_app.tsx @@ -2,6 +2,7 @@ import 'tailwindcss/tailwind.css'; import type { AppProps } from 'next/app'; import '../css/font-awesome.css'; import '@mysten/dapp-kit/dist/index.css'; +import { Toaster } from 'sonner'; import { createNetworkConfig, SuiClientProvider, WalletProvider } from '@mysten/dapp-kit'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; @@ -15,6 +16,7 @@ const { networkConfig } = createNetworkConfig({ testnet: { url: getFullnodeUrl('testnet') }, mainnet: { url: getFullnodeUrl('mainnet') }, }); + const queryClient = new QueryClient(); function MyApp({ Component, pageProps }: AppProps) { @@ -22,6 +24,7 @@ function MyApp({ Component, pageProps }: AppProps) { + diff --git a/packages/create-dubhe/template/nextjs/sui-template/src/pages/home/index.tsx b/packages/create-dubhe/template/nextjs/sui-template/src/pages/home/index.tsx index c16b44f62..7358ab132 100644 --- a/packages/create-dubhe/template/nextjs/sui-template/src/pages/home/index.tsx +++ b/packages/create-dubhe/template/nextjs/sui-template/src/pages/home/index.tsx @@ -1,11 +1,24 @@ -import { loadMetadata, Dubhe, Transaction, DevInspectResults } from '@0xobelisk/sui-client'; +import { loadMetadata, Dubhe, Transaction, DevInspectResults, NetworkType } from '@0xobelisk/sui-client'; import { useEffect, useState } from 'react'; import { useAtom } from 'jotai'; import { Value } from '../../jotai'; import { useRouter } from 'next/router'; import { Counter_Object_Id, NETWORK, PACKAGE_ID } from '../../chain/config'; import { ConnectButton, useCurrentWallet, useSignAndExecuteTransaction, useCurrentAccount } from '@mysten/dapp-kit'; +import { toast } from 'sonner'; +function getExplorerUrl(network: NetworkType, digest: string) { + switch (network) { + case 'testnet': + return `https://explorer.polymedia.app/txblock/${digest}?network=${network}`; + case 'mainnet': + return `https://suiscan.xyz/tx/${digest}`; + case 'devnet': + return `https://explorer.polymedia.app/txblock/${digest}?network=${network}`; + case 'localnet': + return `https://explorer.polymedia.app/txblock/${digest}?network=local`; + } +} /** * Home component for the counter application * Manages the counter state, user balance, and interactions with the Sui blockchain @@ -32,7 +45,6 @@ const Home: React.FC = () => { metadata: metadata, }); const tx = new Transaction(); - console.log('Counter Object ID:', Counter_Object_Id); const queryValue = (await dubhe.query.counter_schema.get_value(tx, [ tx.object(Counter_Object_Id), ])) as DevInspectResults; @@ -77,16 +89,24 @@ const Home: React.FC = () => { chain: `sui:${NETWORK}`, }, { - onSuccess: async () => { + onSuccess: async result => { // Wait for a short period before querying the latest data setTimeout(async () => { await queryCounter(); await getBalance(); + toast('Transfer Successful', { + description: new Date().toUTCString(), + action: { + label: 'Check in Explorer', + onClick: () => window.open(getExplorerUrl(NETWORK, result.digest), '_blank'), + }, + }); setLoading(false); }, 2000); // Wait for 2 seconds before querying, adjust as needed }, onError: error => { console.error('Transaction failed:', error); + toast.error('Transaction failed. Please try again.'); setLoading(false); }, },