import { getContract } from "./provider"; import { ChainContract } from "viem"; import { parseEther, type Address, type TransactionReceipt, } from "viem"; export const addLock = async ( sellerAddress: Address, tokenAddress: Address, amount: number ): Promise => { const { address, abi, wallet, client, account } = await getContract(); const parsedAmount = parseEther(amount.toString()); if (!wallet) { throw new Error("Wallet not connected"); } const { result, request } = await client.simulateContract({ address, abi, functionName: "lock", args: [sellerAddress, tokenAddress, parsedAmount, [], []], account, }); const hash = await wallet.writeContract(request); const receipt = await client.waitForTransactionReceipt({ hash }); if (!receipt.status) throw new Error("Transaction failed: " + receipt.transactionHash); return result; }; export const withdrawDeposit = async ( amount: string, token: Address ): Promise => { const { address, abi, wallet, client, account } = await getContract(); if (!wallet) { throw new Error("Wallet not connected"); } const { request } = await client.simulateContract({ address, abi, functionName: "withdraw", args: [token, parseEther(amount), []], account }); const hash = await wallet.writeContract(request); const receipt = await client.waitForTransactionReceipt({ hash }); return receipt.status === "success"; }; export const releaseLock = async ( lockID: bigint, pixTimestamp: `0x${string}`&{lenght:34}, signature: `0x${string}` ): Promise => { const { address, abi, wallet, client, account } = await getContract(); if (!wallet) { throw new Error("Wallet not connected"); } const { request } = await client.simulateContract({ address, abi, functionName: "release", args: [BigInt(lockID), pixTimestamp, signature], account }); const hash = await wallet.writeContract(request); return client.waitForTransactionReceipt({ hash }); };