harb/web-app/src/composables/useWallet.ts

97 lines
2.8 KiB
TypeScript
Raw Normal View History

2025-09-23 14:18:04 +02:00
import { ref, onMounted, onUnmounted, reactive, computed } from "vue";
import { type Ref } from "vue";
2025-09-24 09:41:28 +02:00
import { getAccount, getBalance, watchAccount, watchChainId } from "@wagmi/core";
2025-09-23 14:18:04 +02:00
import { type WatchAccountReturnType, type GetAccountReturnType, type GetBalanceReturnType } from "@wagmi/core";
import { config } from "@/wagmi";
import { getAllowance, HarbContract, getNonce } from "@/contracts/harb";
import logger from "@/utils/logger";
import { setHarbContract } from "@/contracts/harb";
import { setStakeContract } from "@/contracts/stake";
2025-09-23 19:24:05 +02:00
import {chainsData, DEFAULT_CHAIN_ID} from "@/config"
2025-09-23 14:18:04 +02:00
const balance = ref<GetBalanceReturnType>({
value: 0n,
decimals: 0,
symbol: "",
formatted: ""
});
2025-09-24 09:41:28 +02:00
const account = ref<GetAccountReturnType>(getAccount(config as any));
if (!account.value.chainId) {
(account.value as any).chainId = DEFAULT_CHAIN_ID;
}
2025-09-23 14:18:04 +02:00
2025-09-23 19:24:05 +02:00
const selectedChainId = computed(() => account.value.chainId ?? DEFAULT_CHAIN_ID);
2025-09-23 14:18:04 +02:00
export const chainData = computed(() => {
2025-09-23 19:24:05 +02:00
return chainsData.find((obj) => obj.id === selectedChainId.value)
2025-09-23 14:18:04 +02:00
})
let unwatch: any = null;
let unwatchChain: any = null;
export function useWallet() {
async function loadBalance() {
logger.contract("loadBalance")
if (account.value.address) {
console.log("HarbContract",HarbContract );
balance.value = await getBalance(config as any, {
address: account.value.address,
token: HarbContract.contractAddress,
});
console.log("balance.value", balance.value);
return balance.value;
} else {
return 0n;
}
}
if (!unwatch) {
console.log("useWallet function");
unwatch = watchAccount(config as any, {
async onChange(data) {
console.log("watchaccount-useWallet", data);
if(!data.address) {
logger.info(`disconnected`);
balance.value = {
value: 0n,
decimals: 0,
symbol: "",
formatted: ""
}
} else if (account.value.address !== data.address || account.value.chainId !== data.chainId) {
logger.info(`Account changed!:`, data.address);
account.value = data;
await loadBalance();
await getAllowance();
// await loadPositions();
await getNonce();
setHarbContract()
setStakeContract()
}
},
});
}
//funzt nicht mehr-> library Änderung?
if(!unwatchChain){
console.log("unwatchChain");
unwatchChain = watchChainId(config as any, {
async onChange(chainId) {
console.log("chainId123", chainId);
await loadBalance();
await getAllowance();
await getNonce();
}
});
}
return reactive({ balance, account, loadBalance });
}