Skip to content

Commit

Permalink
feat: add new hooks
Browse files Browse the repository at this point in the history
  • Loading branch information
fabiorigam committed Nov 26, 2024
1 parent 64c3711 commit 4145d48
Show file tree
Hide file tree
Showing 8 changed files with 168 additions and 29 deletions.
11 changes: 10 additions & 1 deletion examples/sample-privy-next-app/src/app/pages/homepage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,17 @@ import { type ReactElement } from 'react';
import { useDisclosure, Button } from "@chakra-ui/react";
import {
useWalletAdapter,
useVOT3Balance,
useB3TRBalance,
// dappKitModal,
ConnectModal,
} from "@vechain/dapp-kit-react-privy";

const HomePage = (): ReactElement => {
const { isConnected, isConnectedWithPrivy, isConnectedWithDappKit, connectedAddress, abstractedAccount, logout } =
useWalletAdapter();

const b3trBalanceQuery = isConnected ? useB3TRBalance({ address: connectedAddress ?? '' }) : useB3TRBalance({ address: abstractedAccount.embeddedWallet?.address ?? '' });
const vot3BalanceQuery = isConnected ? useVOT3Balance({ address: connectedAddress ?? '' }) : useVOT3Balance({ address: abstractedAccount.embeddedWallet?.address ?? '' });
const {
isOpen: isLoginOpen,
onOpen: onLoginOpen,
Expand All @@ -33,6 +36,12 @@ const HomePage = (): ReactElement => {
<p>Connected with DappKit: {isConnectedWithDappKit.toString()}</p>
<p>Abstracted Account: {abstractedAccount.embeddedWallet?.address}</p>
<p>Connected Address: {connectedAddress}</p>
<p>
B3TR Balance: {b3trBalanceQuery.isLoading ? 'Loading...' : b3trBalanceQuery.data ?? 'N/A'}
</p>
<p>
VOT3 Balance: {vot3BalanceQuery.isLoading ? 'Loading...' : vot3BalanceQuery.data ?? 'N/A'}
</p>
</div>
)}

Expand Down
6 changes: 4 additions & 2 deletions packages/dapp-kit-react-privy/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@
"@tanstack/react-query": "^5.61.0",
"@vechain/dapp-kit-react": "*",
"@vechain/sdk-core": "^1.0.0-rc.3",
"@vechain/sdk-network": "^1.0.0-rc.3"
"@vechain/sdk-network": "^1.0.0-rc.3",
"@vechain/vebetterdao-contracts": "^4.1.0"
},
"devDependencies": {
"@types/react": "^18.2.28",
Expand All @@ -35,6 +36,7 @@
"react": "^18.2.0",
"tsup": "*",
"typescript": "*",
"vite": "^4.5.5"
"vite": "^4.5.5",
"vitest": "^0.34.6"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { ReactNode } from "react";
import { PrivyProvider as BasePrivyProvider } from "@privy-io/react-auth";
import { DAppKitProvider } from "@vechain/dapp-kit-react";
import { SmartAccountProvider } from "./hooks";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";

type Props = {
children: ReactNode;
Expand Down Expand Up @@ -54,6 +55,21 @@ type Props = {
};
};

const queryClient = new QueryClient({
defaultOptions: {
queries: {
retry: 0,
staleTime: 30000,
refetchOnWindowFocus: true,
refetchOnMount: true,
refetchOnReconnect: true,
refetchInterval: false,
refetchIntervalInBackground: false,
gcTime: 1000 * 60 * 60 * 24 // 24 hours
}
}
});

export const DAppKitPrivyProvider = ({
children,
appId,
Expand All @@ -65,32 +81,34 @@ export const DAppKitPrivyProvider = ({
dappKitConfig
}: Props) => {
return (
<BasePrivyProvider
appId={appId}
clientId={clientId}
config={{
loginMethods: loginMethods,
appearance: appearance,
embeddedWallets: {
createOnLogin: embeddedWallets.createOnLogin,
},
}}
>
<SmartAccountProvider
nodeUrl={smartAccountConfig.nodeUrl}
delegatorUrl={smartAccountConfig.delegatorUrl}
accountFactory={smartAccountConfig.accountFactoryAddress}
<QueryClientProvider client={queryClient}>
<BasePrivyProvider
appId={appId}
clientId={clientId}
config={{
loginMethods: loginMethods,
appearance: appearance,
embeddedWallets: {
createOnLogin: embeddedWallets.createOnLogin,
},
}}
>
<DAppKitProvider
nodeUrl={dappKitConfig.nodeUrl}
genesis={dappKitConfig.genesis}
usePersistence
walletConnectOptions={dappKitConfig.walletConnectOptions}
themeMode={dappKitConfig.colorMode}
themeVariables={{}}>
{children}
</DAppKitProvider>
</SmartAccountProvider>
</BasePrivyProvider>
<SmartAccountProvider
nodeUrl={smartAccountConfig.nodeUrl}
delegatorUrl={smartAccountConfig.delegatorUrl}
accountFactory={smartAccountConfig.accountFactoryAddress}
>
<DAppKitProvider
nodeUrl={dappKitConfig.nodeUrl}
genesis={dappKitConfig.genesis}
usePersistence
walletConnectOptions={dappKitConfig.walletConnectOptions}
themeMode={dappKitConfig.colorMode}
themeVariables={{}}>
{children}
</DAppKitProvider>
</SmartAccountProvider>
</BasePrivyProvider>
</QueryClientProvider>
);
};
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
export * from "./useB3TRBalance";
export * from "./useWalletAdapter";
export * from "./useTxReceipt";
export * from "./useVOT3Balance";
export * from "./useSendAccountAbstractedTransaction";
export * from "./useSmartAccount";
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { useQuery, UseQueryResult } from "@tanstack/react-query";
import { B3TR_CONTRACT } from "../utils/consts";
import { FixedPointNumber, Units } from "@vechain/sdk-core";

export const useB3TRBalance = ({
address
}: {
address: string;
}): UseQueryResult<string, unknown> => {
return useQuery({
queryKey: ["useB3TRBalance", address],
queryFn: async () => {
if (address !== null && address !== undefined && address === '') {
return '0';
}
try {
const balanceB3TR = (
await B3TR_CONTRACT.read.balanceOf(address)
)[0] as bigint;

return Units.formatEther(
FixedPointNumber.of(balanceB3TR)
);
} catch (error) {
console.error('Failed to fetch B3TR balance:', error);
return 'error';
}
},
staleTime: 3000,
refetchInterval: 10000,
enabled: address !== null && address !== undefined && address !== ''
});
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { useQuery, UseQueryResult } from "@tanstack/react-query";
import { VOT3_CONTRACT } from "../utils/consts";
import { FixedPointNumber, Units } from "@vechain/sdk-core";

export const useVOT3Balance = ({
address
}: {
address: string;
}): UseQueryResult<string, unknown> => {
return useQuery({
queryKey: ["useVOT3Balance", address],
queryFn: async () => {
if (address !== null && address !== undefined && address === '') {
return '0';
}
try {
const balanceVOT3 = (
await VOT3_CONTRACT.read.balanceOf(address)
)[0] as bigint;

return Units.formatEther(
FixedPointNumber.of(balanceVOT3)
);
} catch (error) {
console.error('Failed to fetch VOT3 balance:', error);
return 'error';
}
},
staleTime: 3000,
refetchInterval: 10000,
enabled: address !== null && address !== undefined && address !== ''
});
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { B3TR, VOT3 } from '@vechain/vebetterdao-contracts';
import { ThorClient } from '@vechain/sdk-network';

/**
* Thor client instance
*/
export const THOR_CLIENT = ThorClient.at('https://mainnet.vechain.org');

/**
* B3TR contract instance
*/
export const B3TR_CONTRACT = THOR_CLIENT.contracts.load(
B3TR.address.mainnet,
B3TR.abi
);

/**
* VOT3 contract instance
*/
export const VOT3_CONTRACT = THOR_CLIENT.contracts.load(
VOT3.address.mainnet,
VOT3.abi
);
19 changes: 19 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -4837,11 +4837,21 @@
read-package-json-fast "^3.0.0"
which "^3.0.0"

"@openzeppelin/[email protected]":
version "5.0.2"
resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-5.0.2.tgz#3e5321a2ecdd0b206064356798c21225b6ec7105"
integrity sha512-0MmkHSHiW2NRFiT9/r5Lu4eJq5UJ4/tzlOgYXNAIj/ONkQTVnz22pLxDvp4C4uZ9he7ZFvGn3Driptn1/iU7tQ==

"@openzeppelin/contracts-upgradeable@^5.0.2":
version "5.1.0"
resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-5.1.0.tgz#4d37648b7402929c53e2ff6e45749ecff91eb2b6"
integrity sha512-AIElwP5Ck+cslNE+Hkemf5SxjJoF4wBvvjxc27Rp+9jaPs/CLIaUBMYe1FNzhdiN0cYuwGRmYaRHmmntuiju4Q==

"@openzeppelin/[email protected]":
version "5.0.2"
resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-5.0.2.tgz#b1d03075e49290d06570b2fd42154d76c2a5d210"
integrity sha512-ytPc6eLGcHHnapAZ9S+5qsdomhjo6QBHTDRRBFfTxXIpsicMhVPouPgmUPebZZZGX7vt9USA+Z+0M0dSVtSUEA==

"@openzeppelin/contracts@^5.0.2":
version "5.1.0"
resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-5.1.0.tgz#4e61162f2a2bf414c4e10c45eca98ce5f1aadbd4"
Expand Down Expand Up @@ -7525,6 +7535,15 @@
"@openzeppelin/contracts-upgradeable" "^5.0.2"
ethers "^6.9.0"

"@vechain/vebetterdao-contracts@^4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@vechain/vebetterdao-contracts/-/vebetterdao-contracts-4.1.0.tgz#5a081bf9c548ea777fe16dcab40536d6d2cc1a62"
integrity sha512-vLxxErpvHuVisrkgvrrqgz8hkhbhreEmOyjolcRGpYF9ozzhEm1wTZKelO9qmKoNi/mviMG6ZYZU3Ykwg9LfIw==
dependencies:
"@openzeppelin/contracts" "5.0.2"
"@openzeppelin/contracts-upgradeable" "5.0.2"
ethers "^6.9.0"

"@vitejs/[email protected]":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.0.1.tgz#48c46eab21e0730921986ce742563ae83fe7fe34"
Expand Down

0 comments on commit 4145d48

Please sign in to comment.