harb/web-app/src/contracts/harb.ts

157 lines
3.9 KiB
TypeScript
Raw Normal View History

import { ref } from 'vue';
import { config } from '@/wagmi';
import { getAccount, readContract, writeContract, waitForTransactionReceipt, getChainId } from '@wagmi/core';
import type { Config } from '@wagmi/core';
import { KraikenAbi } from 'kraiken-lib';
import { type Abi, type Address, type Hash } from 'viem';
import { StakeContract } from '@/contracts/stake';
import { getChain } from '@/config';
import logger from '@/utils/logger';
2025-09-23 14:18:04 +02:00
// const chain1 = useChain();
// console.log("chain1", chain1);
interface Contract {
abi: Abi;
contractAddress: Address;
2025-09-23 14:18:04 +02:00
}
export const allowance = ref();
export const nonce = ref();
export const name = ref();
export const ubiDue = ref();
export const totalSupply = ref(0n);
// export const HarbContract = await getHarbJson()
export let HarbContract = getHarbJson();
function getHarbJson() {
// console.log("getHarbJson");
const chainId = getChainId(config as Config);
// console.log("chainId", chainId);
const chain = getChain(chainId);
return { abi: KraikenAbi as Abi, contractAddress: chain?.harb } as Contract;
2025-09-23 14:18:04 +02:00
}
export function setHarbContract() {
// console.log("setHarbContract");
HarbContract = getHarbJson();
2025-09-23 14:18:04 +02:00
}
// watch(chainData, async (newQuestion, oldQuestion) => {
// console.log("log harb update");
// });
2025-09-23 14:18:04 +02:00
export async function getAllowance() {
logger.contract('getAllowance');
const account = getAccount(config as Config);
if (!account.address) {
return 0n;
}
const result = await readContract(config as Config, {
abi: HarbContract.abi,
address: HarbContract.contractAddress,
functionName: 'allowance',
args: [account.address, StakeContract.contractAddress],
});
allowance.value = result;
return result;
2025-09-23 14:18:04 +02:00
}
export async function getMinStake() {
logger.contract('getMinStake');
const result: bigint = (await readContract(config as Config, {
abi: HarbContract.abi,
address: HarbContract.contractAddress,
functionName: 'minStake',
args: [],
})) as bigint;
allowance.value = result;
return result;
2025-09-23 14:18:04 +02:00
}
export async function getNonce() {
logger.contract('getNonce');
const account = getAccount(config as Config);
if (!account.address) {
return 0n;
}
// console.log("HarbContract.contractAddress", HarbContract.contractAddress);
const result = await readContract(config as Config, {
abi: HarbContract.abi,
address: HarbContract.contractAddress,
functionName: 'nonces',
args: [account.address],
});
nonce.value = result;
return result;
2025-09-23 14:18:04 +02:00
}
export async function getName() {
logger.contract('getName');
2025-09-23 14:18:04 +02:00
const result = await readContract(config as Config, {
abi: HarbContract.abi,
address: HarbContract.contractAddress,
functionName: 'name',
args: [],
});
name.value = result;
2025-09-23 14:18:04 +02:00
return result as string;
2025-09-23 14:18:04 +02:00
}
export async function approve(amount: bigint): Promise<Hash> {
const account = getAccount(config as Config);
if (!account.address) {
throw new Error('no address found');
}
const result = await writeContract(config as Config, {
abi: HarbContract.abi,
address: HarbContract.contractAddress,
functionName: 'approve',
args: [StakeContract.contractAddress, amount],
});
// console.log("result", result);
await waitForTransactionReceipt(config as Config, {
hash: result,
});
// console.log("transactionReceipt", transactionReceipt);
return result;
2025-09-23 14:18:04 +02:00
}
//claim
export async function claimUbi(address: Address): Promise<Hash> {
const result = await writeContract(config as Config, {
abi: HarbContract.abi,
address: HarbContract.contractAddress,
functionName: 'claimUbi',
args: [address],
});
return result;
}
2025-09-23 14:18:04 +02:00
export async function getTotalSupply() {
logger.contract('getTotalSupply');
const result = await readContract(config as Config, {
abi: HarbContract.abi,
address: HarbContract.contractAddress,
functionName: 'totalSupply',
args: [],
});
totalSupply.value = result as bigint;
return result;
2025-09-23 14:18:04 +02:00
}