From 3703fb812da6a45176e750a64e2b2ed77ab6d29d Mon Sep 17 00:00:00 2001 From: Joaquim Verges Date: Sat, 31 May 2025 21:48:11 +1200 Subject: [PATCH] [SDK] Optimize fiat conversion query --- .changeset/dark-dancers-hammer.md | 5 +++++ .../src/pay/convert/cryptoToFiat.test.ts | 19 +------------------ .../thirdweb/src/pay/convert/cryptoToFiat.ts | 19 ------------------- .../src/pay/convert/fiatToCrypto.test.ts | 19 +------------------ .../thirdweb/src/pay/convert/fiatToCrypto.ts | 18 ------------------ 5 files changed, 7 insertions(+), 73 deletions(-) create mode 100644 .changeset/dark-dancers-hammer.md diff --git a/.changeset/dark-dancers-hammer.md b/.changeset/dark-dancers-hammer.md new file mode 100644 index 00000000000..586593d7456 --- /dev/null +++ b/.changeset/dark-dancers-hammer.md @@ -0,0 +1,5 @@ +--- +"thirdweb": patch +--- + +Optimize fiat conversion query diff --git a/packages/thirdweb/src/pay/convert/cryptoToFiat.test.ts b/packages/thirdweb/src/pay/convert/cryptoToFiat.test.ts index 645784ae433..34d06e8fe6d 100644 --- a/packages/thirdweb/src/pay/convert/cryptoToFiat.test.ts +++ b/packages/thirdweb/src/pay/convert/cryptoToFiat.test.ts @@ -3,10 +3,7 @@ import { TEST_CLIENT } from "~test/test-clients.js"; import { base } from "../../chains/chain-definitions/base.js"; import { ethereum } from "../../chains/chain-definitions/ethereum.js"; import { sepolia } from "../../chains/chain-definitions/sepolia.js"; -import { - NATIVE_TOKEN_ADDRESS, - ZERO_ADDRESS, -} from "../../constants/addresses.js"; +import { NATIVE_TOKEN_ADDRESS } from "../../constants/addresses.js"; import { convertCryptoToFiat } from "./cryptoToFiat.js"; describe.runIf(process.env.TW_SECRET_KEY)("Pay: crypto-to-fiat", () => { @@ -78,18 +75,4 @@ describe.runIf(process.env.TW_SECRET_KEY)("Pay: crypto-to-fiat", () => { "Invalid fromTokenAddress. Expected a valid EVM contract address", ); }); - - it("should throw error if fromTokenAddress is set to a wallet address", async () => { - await expect( - convertCryptoToFiat({ - chain: base, - fromTokenAddress: ZERO_ADDRESS, - fromAmount: 1, - to: "USD", - client: TEST_CLIENT, - }), - ).rejects.toThrowError( - `Error: ${ZERO_ADDRESS} on chainId: ${base.id} is not a valid contract address.`, - ); - }); }); diff --git a/packages/thirdweb/src/pay/convert/cryptoToFiat.ts b/packages/thirdweb/src/pay/convert/cryptoToFiat.ts index d27fb397f97..fc6b04b0d81 100644 --- a/packages/thirdweb/src/pay/convert/cryptoToFiat.ts +++ b/packages/thirdweb/src/pay/convert/cryptoToFiat.ts @@ -1,9 +1,6 @@ import type { Address } from "abitype"; import type { Chain } from "../../chains/types.js"; import type { ThirdwebClient } from "../../client/client.js"; -import { NATIVE_TOKEN_ADDRESS } from "../../constants/addresses.js"; -import { getBytecode } from "../../contract/actions/get-bytecode.js"; -import { getContract } from "../../contract/contract.js"; import { isAddress } from "../../utils/address.js"; import { getTokenPrice } from "./get-token.js"; import type { SupportedFiatCurrency } from "./type.js"; @@ -76,22 +73,6 @@ export async function convertCryptoToFiat( "Invalid fromTokenAddress. Expected a valid EVM contract address", ); } - // Make sure it's either a valid contract or a native token address - if (fromTokenAddress.toLowerCase() !== NATIVE_TOKEN_ADDRESS.toLowerCase()) { - const bytecode = await getBytecode( - getContract({ - address: fromTokenAddress, - chain, - client, - }), - ).catch(() => undefined); - if (!bytecode || bytecode === "0x") { - throw new Error( - `Error: ${fromTokenAddress} on chainId: ${chain.id} is not a valid contract address.`, - ); - } - } - const price = await getTokenPrice(client, fromTokenAddress, chain.id); if (!price) { throw new Error( diff --git a/packages/thirdweb/src/pay/convert/fiatToCrypto.test.ts b/packages/thirdweb/src/pay/convert/fiatToCrypto.test.ts index 59fdfc264a1..5053708bc3f 100644 --- a/packages/thirdweb/src/pay/convert/fiatToCrypto.test.ts +++ b/packages/thirdweb/src/pay/convert/fiatToCrypto.test.ts @@ -3,10 +3,7 @@ import { TEST_CLIENT } from "~test/test-clients.js"; import { base } from "../../chains/chain-definitions/base.js"; import { ethereum } from "../../chains/chain-definitions/ethereum.js"; import { sepolia } from "../../chains/chain-definitions/sepolia.js"; -import { - NATIVE_TOKEN_ADDRESS, - ZERO_ADDRESS, -} from "../../constants/addresses.js"; +import { NATIVE_TOKEN_ADDRESS } from "../../constants/addresses.js"; import { convertFiatToCrypto } from "./fiatToCrypto.js"; describe.runIf(process.env.TW_SECRET_KEY)("Pay: fiatToCrypto", () => { @@ -81,18 +78,4 @@ describe.runIf(process.env.TW_SECRET_KEY)("Pay: fiatToCrypto", () => { "Invalid `to`. Expected a valid EVM contract address", ); }); - - it("should throw error if `to` is set to a wallet address", async () => { - await expect( - convertFiatToCrypto({ - chain: base, - to: ZERO_ADDRESS, - fromAmount: 1, - from: "USD", - client: TEST_CLIENT, - }), - ).rejects.toThrowError( - `Error: ${ZERO_ADDRESS} on chainId: ${base.id} is not a valid contract address.`, - ); - }); }); diff --git a/packages/thirdweb/src/pay/convert/fiatToCrypto.ts b/packages/thirdweb/src/pay/convert/fiatToCrypto.ts index e4b027840a4..82ab392727e 100644 --- a/packages/thirdweb/src/pay/convert/fiatToCrypto.ts +++ b/packages/thirdweb/src/pay/convert/fiatToCrypto.ts @@ -1,9 +1,6 @@ import type { Address } from "abitype"; import type { Chain } from "../../chains/types.js"; import type { ThirdwebClient } from "../../client/client.js"; -import { NATIVE_TOKEN_ADDRESS } from "../../constants/addresses.js"; -import { getBytecode } from "../../contract/actions/get-bytecode.js"; -import { getContract } from "../../contract/contract.js"; import { isAddress } from "../../utils/address.js"; import { getTokenPrice } from "./get-token.js"; import type { SupportedFiatCurrency } from "./type.js"; @@ -75,21 +72,6 @@ export async function convertFiatToCrypto( if (!isAddress(to)) { throw new Error("Invalid `to`. Expected a valid EVM contract address"); } - // Make sure it's either a valid contract or a native token - if (to.toLowerCase() !== NATIVE_TOKEN_ADDRESS.toLowerCase()) { - const bytecode = await getBytecode( - getContract({ - address: to, - chain, - client, - }), - ).catch(() => undefined); - if (!bytecode || bytecode === "0x") { - throw new Error( - `Error: ${to} on chainId: ${chain.id} is not a valid contract address.`, - ); - } - } const price = await getTokenPrice(client, to, chain.id); if (!price || price === 0) { throw new Error(