UNPKG

@locker-labs/sdk

Version:

A utility library for enhancing your ERC-4337 experience

97 lines (84 loc) 2.41 kB
import { base, baseSepolia, sepolia } from "@account-kit/infra"; import { EChain } from "./tokens.js"; const getUserOperationByHash = async (userOpHash: string, alchemyRpcUrl: string) => { const headers = { accept: "application/json", "content-type": "application/json", }; const body = JSON.stringify({ id: 1, jsonrpc: "2.0", method: "eth_getUserOperationByHash", params: [userOpHash], }); try { const response = await fetch(alchemyRpcUrl, { method: "POST", headers: headers, body: body, }); const data: any = await response.json(); return data?.result?.transactionHash; } catch (e) { console.error(e); } }; async function getTransactionReceipt(txHash: string, alchemyRpcUrl: string) { const headers = { accept: "application/json", "content-type": "application/json", }; const body = JSON.stringify({ id: 1, jsonrpc: "2.0", method: "eth_getTransactionReceipt", params: [txHash], }); try { const response = await fetch(alchemyRpcUrl, { method: "POST", headers: headers, body: body, }); const data: any = await response.json(); return data?.result; } catch (error) { console.error("Error:", error); } } export const waitForTransaction = async (userOpHash: string, alchemyRpcUrl: string) => { console.log("Waiting for userOp confirmation..."); let txHash; while (!txHash) { txHash = await getUserOperationByHash(userOpHash, alchemyRpcUrl); if (txHash) { console.log("txHash:", txHash); break; } await new Promise((resolve) => setTimeout(resolve, 3000)); // Wait for 3 seconds before retrying } let txReceipt; console.log("Waiting for tx confirmation..."); while (!txReceipt) { txReceipt = await getTransactionReceipt(txHash, alchemyRpcUrl); if (txReceipt) { console.log("Receipt:", txReceipt); break; } await new Promise((resolve) => setTimeout(resolve, 1000)); // Wait for 1 second before retrying } } export const adaptLockerChain2AlchemyChain = (lockerChain: EChain) => { switch (lockerChain) { case EChain.BASE: return base; case EChain.BASE_SEPOLIA: return baseSepolia; case EChain.SEPOLIA: return sepolia; case EChain.SOLANA: case EChain.SOLANA_DEVNET: default: throw new Error(`Unsupported chain: ${lockerChain}`); } }