diff --git a/lib/activityUtils.ts b/lib/activityUtils.ts index 2af7eb95..f8a7d552 100644 --- a/lib/activityUtils.ts +++ b/lib/activityUtils.ts @@ -1,150 +1,98 @@ -import { decodeAbiParameters } from "viem"; import { PublicKey } from "@solana/web3.js"; -const solanaWeb3 = require("@solana/web3.js"); import * as anchor from "@project-serum/anchor"; -function low64(value: bigint): bigint { +function low64(value) { return value & BigInt("0xFFFFFFFFFFFFFFFF"); } -export async function generateTxObjectForDetails( - walletClient: any, - txHash: string, -) { - const receiptPromise = walletClient.request({ - method: "eth_getTransactionReceipt", - params: [txHash], - }); - - // eth_getTransactionByHash - const transactionPromise = walletClient.request({ - method: "eth_getTransactionByHash", - params: [txHash], - }); - +export async function generateTxObjectForDetails(walletClient, txHash) { const [receipt, transaction] = await Promise.all([ - receiptPromise, - transactionPromise, + walletClient.request({ method: "eth_getTransactionReceipt", params: [txHash] }), + walletClient.request({ method: "eth_getTransactionByHash", params: [txHash] }), ]); - const blockPromise = walletClient.request({ + if (!transaction) return null; + + const block = await walletClient.request({ method: "eth_getBlockByNumber", params: [transaction.blockNumber, false], }); - const block = await blockPromise; - return { hash: txHash, - value: transaction.value, // in wei - gasPrice: transaction.gasPrice, // gas price in wei - gasUsed: receipt.gasUsed, // gas used in the transaction - timeStamp: parseInt(block.timestamp, 16), // block timestamp in seconds - txreceipt_status: receipt.status.replace("0x", ""), + value: transaction?.value ?? "0", + gasPrice: transaction?.gasPrice ?? "0", + gasUsed: receipt?.gasUsed ?? "0", + timeStamp: parseInt(block?.timestamp || "0", 16), + txreceipt_status: receipt?.status?.replace("0x", "") ?? "0", }; } -export async function getNonce( - walletClient: any, - transactionHash: string, - bridgeProgram: string, -): Promise { +export async function getNonce(walletClient, transactionHash, bridgeProgram) { try { const txHashLowU64 = low64(BigInt(transactionHash)); const ethDepositNonceBN = new anchor.BN(txHashLowU64.toString(), 10); const programPublicKey = new PublicKey(bridgeProgram); - const [depositReceiptPda, _] = PublicKey.findProgramAddressSync( + const [depositReceiptPda] = PublicKey.findProgramAddressSync( [Buffer.from("deposit"), ethDepositNonceBN.toArrayLike(Buffer, "le", 8)], - programPublicKey, + programPublicKey ); return depositReceiptPda; } catch (error) { - console.error("Error while getting nonce or deriving PDA:", error); + console.error("Error getting nonce or deriving PDA:", error); return null; } } -// fix -export async function getEclipseTransaction( - address: PublicKey | null, - eclipseRpc: string, -) { - if (!address) { - return null; - } - const connection = new solanaWeb3.Connection(eclipseRpc, "confirmed"); - - const data = await connection.getSignaturesForAddress(address); - if (!data) return null; - return data; +export async function getEclipseTransaction(address, eclipseRpc) { + if (!address) return null; + const connection = new PublicKey(eclipseRpc, "confirmed"); + return connection.getSignaturesForAddress(address) || null; } -// fix -export async function checkDepositWithPDA( - address: PublicKey | null, - eclipseRpc: string, -) { - if (!address) { - return null; - } - const connection = new solanaWeb3.Connection(eclipseRpc, "confirmed"); - - const data = await connection.getAccountInfo(address); - if (!data) return null; - return data; +export async function checkDepositWithPDA(address, eclipseRpc) { + if (!address) return null; + const connection = new PublicKey(eclipseRpc, "confirmed"); + return connection.getAccountInfo(address) || null; } -export async function getLastDeposits(address: string, chain: string) { +export async function getLastDeposits(address, chain) { if (!address) return []; - const response = await fetch( - `/api/get-transactions?address=${address}&chain=${chain}`, - ); - const deposits = await response.json(); - - return deposits; + return fetch(`/api/get-transactions?address=${address}&chain=${chain}`) + .then(res => res.json()) + .catch(() => []); } -export const timeAgo = (timestamp: number): string => { +export const timeAgo = (timestamp) => { const now = Date.now(); const secondsPast = Math.floor((now - timestamp * 1000) / 1000); - - if (secondsPast < 60) { - return `${secondsPast} Secs ago`; - } else if (secondsPast < 3600) { - const minutes = Math.floor(secondsPast / 60); - return minutes === 1 ? `1 Min ago` : `${minutes} Mins ago`; - } else if (secondsPast < 86400) { - const hours = Math.floor(secondsPast / 3600); - return hours === 1 ? `1 Hour ago` : `${hours} Hours ago`; - } else if (secondsPast < 2592000) { - const days = Math.floor(secondsPast / 86400); - return days === 1 ? `1 Day ago` : `${days} Days ago`; - } else if (secondsPast < 31536000) { - const months = Math.floor(secondsPast / 2592000); - return months === 1 ? `1 Month ago` : `${months} Months ago`; - } else { - const years = Math.floor(secondsPast / 31536000); - return years === 1 ? `1 Year ago` : `${years} Years ago`; + const units = [ + [60, "Sec"], + [3600, "Min"], + [86400, "Hour"], + [2592000, "Day"], + [31536000, "Month"], + ]; + + for (const [unit, label] of units) { + if (secondsPast < unit) return `${Math.floor(secondsPast / (unit / 60))} ${label}${secondsPast < unit / 60 ? "s" : ""} ago`; } + return `${Math.floor(secondsPast / 31536000)} Year(s) ago`; }; -export const timeLeft = (timestamp: number): string => { +export const timeLeft = (timestamp) => { const now = Date.now(); const secondsLeft = Math.floor((timestamp - now) / 1000); - - if (secondsLeft < 60) { - return `${secondsLeft} secs`; - } else if (secondsLeft < 3600) { - const minutes = Math.ceil(secondsLeft / 60); - return minutes === 1 ? `1 min` : `${minutes} mins`; - } else if (secondsLeft < 86400) { - const hours = Math.ceil(secondsLeft / 3600); - return hours === 1 ? `1 hour` : `${hours} hours`; - } else if (secondsLeft < 2592000) { - const days = Math.ceil(secondsLeft / 86400); - return days === 1 ? `1 day` : `${days} days`; - } else { - return ""; + const units = [ + [60, "sec"], + [3600, "min"], + [86400, "hour"], + [2592000, "day"], + ]; + + for (const [unit, label] of units) { + if (secondsLeft < unit) return `${Math.ceil(secondsLeft / (unit / 60))} ${label}${secondsLeft < unit / 60 ? "s" : ""}`; } + return ""; };