diff --git a/src/read/balance.ts b/src/read/balance.ts index 1954e58..8e47f92 100644 --- a/src/read/balance.ts +++ b/src/read/balance.ts @@ -1,6 +1,5 @@ -import { Provider } from 'fuels'; import { getAllVerifiedFuelAssets } from '../utils/assets.js'; -import { setupWallet } from '../utils/setup.js'; +import { setupWallet, ProviderInstance } from '../utils/setup.js'; export type GetOwnBalanceParams = { symbol: string; @@ -32,9 +31,7 @@ export type GetBalanceParams = { }; export const getBalance = async (params: GetBalanceParams) => { - const provider = await Provider.create( - 'https://mainnet.fuel.network/v1/graphql', - ); + const provider = await ProviderInstance.getProvider(); const allAssets = await getAllVerifiedFuelAssets(); const asset = allAssets.find((asset) => asset.symbol === params.assetSymbol); diff --git a/src/utils/setup.ts b/src/utils/setup.ts index 043ca45..1a12a65 100644 --- a/src/utils/setup.ts +++ b/src/utils/setup.ts @@ -1,10 +1,22 @@ import { Provider, Wallet } from 'fuels'; -export const setupWallet = async (privateKey: string) => { - const provider = await Provider.create( - 'https://mainnet.fuel.network/v1/graphql', - ); +export class ProviderInstance { + private static instance: Provider | null = null; + private static readonly PROVIDER_URL = + 'https://mainnet.fuel.network/v1/graphql'; + + private constructor() {} // Prevent direct construction + public static async getProvider(): Promise { + if (!ProviderInstance.instance) { + ProviderInstance.instance = await Provider.create(this.PROVIDER_URL); + } + return ProviderInstance.instance; + } +} + +export const setupWallet = async (privateKey: string) => { + const provider = await ProviderInstance.getProvider(); const wallet = Wallet.fromPrivateKey(privateKey, provider); return {