diff --git a/examples/rln-js/src/app/home/components/Header.tsx b/examples/rln-js/src/app/home/components/Header.tsx
index 337d05e..de6fca8 100644
--- a/examples/rln-js/src/app/home/components/Header.tsx
+++ b/examples/rln-js/src/app/home/components/Header.tsx
@@ -1,18 +1,15 @@
import { Block, BlockTypes } from "@/components/Block";
import { Title } from "@/components/Title";
-import { Button } from "@/components/Button";
import { Status } from "@/components/Status";
-import { useStore, useWallet } from "@/hooks";
+import { useStore } from "@/hooks";
export const Header: React.FunctionComponent<{}> = () => {
const { appStatus } = useStore();
- const { onConnectWallet } = useWallet();
return (
<>
Waku RLN
-
>
diff --git a/examples/rln-js/src/hooks/useContract.ts b/examples/rln-js/src/hooks/useContract.ts
index 1542b0b..d066900 100644
--- a/examples/rln-js/src/hooks/useContract.ts
+++ b/examples/rln-js/src/hooks/useContract.ts
@@ -8,25 +8,51 @@ type UseContractResult = {
export const useContract = (): UseContractResult => {
const { rln } = useRLN();
- const { setLastMembershipID } = useStore();
+ const { setEthAccount, setChainID, setLastMembershipID } = useStore();
const onFetchContract = React.useCallback(async () => {
- if (!rln?.rlnContract || !rln?.rlnInstance) {
- console.log("Cannot fetch contract info, no contract found.");
- return;
- }
+ const fetchAccounts = new Promise(async (resolve) => {
+ if (!rln) {
+ console.log("Cannot fetch wallet, not provider found.");
+ resolve();
+ return;
+ }
- // disable button
- await rln.rlnContract.fetchMembers(rln.rlnInstance);
- // enable button
- rln.rlnContract.subscribeToMembers(rln.rlnInstance);
+ try {
+ const accounts = await rln.ethProvider.send("eth_requestAccounts", []);
+ setEthAccount(accounts[0] || "");
+ const network = await rln.ethProvider.getNetwork();
+ setChainID(network.chainId);
+ } catch (error) {
+ console.error("Failed to connect to account: ", error);
+ }
+ resolve();
+ });
- const last = rln.rlnContract.members.at(-1);
+ const fetchContract = new Promise(async (resolve) => {
+ if (!rln?.rlnContract || !rln?.rlnInstance) {
+ console.log("Cannot fetch contract info, no contract found.");
+ resolve();
+ return;
+ }
- if (last) {
- setLastMembershipID(last.index.toNumber());
- }
- }, [rln, setLastMembershipID]);
+ try {
+ await rln.rlnContract.fetchMembers(rln.rlnInstance);
+ rln.rlnContract.subscribeToMembers(rln.rlnInstance);
+
+ const last = rln.rlnContract.members.at(-1);
+
+ if (last) {
+ setLastMembershipID(last.index.toNumber());
+ }
+ } catch (error) {
+ console.error("Failed to fetch contract state: ", error);
+ }
+ resolve();
+ });
+
+ await Promise.any([fetchAccounts, fetchContract]);
+ }, [rln, setEthAccount, setChainID, setLastMembershipID]);
return {
onFetchContract,
diff --git a/examples/rln-js/src/hooks/useWallet.ts b/examples/rln-js/src/hooks/useWallet.ts
index c90aa59..8eae0b4 100644
--- a/examples/rln-js/src/hooks/useWallet.ts
+++ b/examples/rln-js/src/hooks/useWallet.ts
@@ -5,7 +5,6 @@ import { useRLN } from "./useRLN";
import { SIGNATURE_MESSAGE } from "@/constants";
type UseWalletResult = {
- onConnectWallet: () => void;
onGenerateCredentials: () => void;
};
@@ -37,22 +36,6 @@ export const useWallet = (): UseWalletResult => {
};
}, [setEthAccount, setChainID]);
- const onConnectWallet = React.useCallback(async () => {
- if (!rln?.ethProvider) {
- console.log("Cannot connect wallet, no provider found.");
- return;
- }
-
- try {
- const accounts = await rln.ethProvider.send("eth_requestAccounts", []);
- setEthAccount(accounts[0] || "");
- const network = await rln.ethProvider.getNetwork();
- setChainID(network.chainId);
- } catch (error) {
- console.error("Failed to connect to account: ", error);
- }
- }, [rln, setEthAccount, setChainID]);
-
const onGenerateCredentials = React.useCallback(async () => {
if (!rln?.ethProvider) {
console.log("Cannot generate credentials, no provider found.");
@@ -70,7 +53,6 @@ export const useWallet = (): UseWalletResult => {
}, [rln, setCredentials]);
return {
- onConnectWallet,
onGenerateCredentials,
};
};