From bf5955e7b66e25e349f41884de79f13a3e04a044 Mon Sep 17 00:00:00 2001 From: Saurabh Chauhan <36479565+starc007@users.noreply.github.com> Date: Sat, 28 Dec 2024 23:45:49 +0530 Subject: [PATCH 1/2] fix: cache provider instance for better performance --- src/read/balance.ts | 7 ++----- src/utils/setup.ts | 16 ++++++++++++---- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/read/balance.ts b/src/read/balance.ts index 1954e58..d136882 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, getProvider } 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 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..90ba1d0 100644 --- a/src/utils/setup.ts +++ b/src/utils/setup.ts @@ -1,10 +1,18 @@ import { Provider, Wallet } from 'fuels'; -export const setupWallet = async (privateKey: string) => { - const provider = await Provider.create( - 'https://mainnet.fuel.network/v1/graphql', - ); +let cachedProvider: Provider | null = null; + +export const getProvider = async () => { + if (!cachedProvider) { + cachedProvider = await Provider.create( + 'https://mainnet.fuel.network/v1/graphql', + ); + } + return cachedProvider; +}; +export const setupWallet = async (privateKey: string) => { + const provider = await getProvider(); const wallet = Wallet.fromPrivateKey(privateKey, provider); return { From 625e90cc33888f4d56c0092aa431cebcf61306af Mon Sep 17 00:00:00 2001 From: Saurabh Chauhan <36479565+starc007@users.noreply.github.com> Date: Sat, 28 Dec 2024 23:54:52 +0530 Subject: [PATCH 2/2] refactor: implement Provider singleton pattern --- src/read/balance.ts | 4 ++-- src/utils/setup.ts | 22 +++++++++++++--------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/read/balance.ts b/src/read/balance.ts index d136882..8e47f92 100644 --- a/src/read/balance.ts +++ b/src/read/balance.ts @@ -1,5 +1,5 @@ import { getAllVerifiedFuelAssets } from '../utils/assets.js'; -import { setupWallet, getProvider } from '../utils/setup.js'; +import { setupWallet, ProviderInstance } from '../utils/setup.js'; export type GetOwnBalanceParams = { symbol: string; @@ -31,7 +31,7 @@ export type GetBalanceParams = { }; export const getBalance = async (params: GetBalanceParams) => { - const provider = await getProvider(); + 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 90ba1d0..1a12a65 100644 --- a/src/utils/setup.ts +++ b/src/utils/setup.ts @@ -1,18 +1,22 @@ import { Provider, Wallet } from 'fuels'; -let cachedProvider: Provider | null = null; +export class ProviderInstance { + private static instance: Provider | null = null; + private static readonly PROVIDER_URL = + 'https://mainnet.fuel.network/v1/graphql'; -export const getProvider = async () => { - if (!cachedProvider) { - cachedProvider = await Provider.create( - '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; } - return cachedProvider; -}; +} export const setupWallet = async (privateKey: string) => { - const provider = await getProvider(); + const provider = await ProviderInstance.getProvider(); const wallet = Wallet.fromPrivateKey(privateKey, provider); return {