diff --git a/.changeset/sour-numbers-refuse.md b/.changeset/sour-numbers-refuse.md new file mode 100644 index 0000000000..6ed4185044 --- /dev/null +++ b/.changeset/sour-numbers-refuse.md @@ -0,0 +1,6 @@ +--- +"@thirdweb-dev/react": patch +"@thirdweb-dev/sdk": patch +--- + +[EVM] - allow `useContract` to fail faster to enable the import case diff --git a/packages/react/src/evm/hooks/async/contracts.ts b/packages/react/src/evm/hooks/async/contracts.ts index 269448b8ef..aef211d34f 100644 --- a/packages/react/src/evm/hooks/async/contracts.ts +++ b/packages/react/src/evm/hooks/async/contracts.ts @@ -238,7 +238,7 @@ export function useContract( await queryClient.fetchQuery( compilerMetadata.cacheKey(contractAddress, activeChainId), () => compilerMetadata.fetchQuery(contractAddress, sdk), - { cacheTime: Infinity, staleTime: Infinity }, + { cacheTime: Infinity, staleTime: Infinity, retry: 0 }, ) )?.abi; } @@ -258,6 +258,8 @@ export function useContract( cacheTime: Infinity, staleTime: Infinity, enabled: !!contractAddress && !!sdk && !!activeChainId, + // never retry + retry: 0, }, ); diff --git a/packages/sdk/src/evm/common/feature-detection.ts b/packages/sdk/src/evm/common/feature-detection.ts index 55cc38f8e9..435e153a50 100644 --- a/packages/sdk/src/evm/common/feature-detection.ts +++ b/packages/sdk/src/evm/common/feature-detection.ts @@ -442,6 +442,11 @@ export async function fetchContractMetadata( storage: ThirdwebStorage, ): Promise { const metadata = await storage.downloadJSON(compilerMetadataUri); + if (!metadata || !metadata.output) { + throw new Error( + `Could not resolve metadata for contract at ${compilerMetadataUri}`, + ); + } const abi = AbiSchema.parse(metadata.output.abi); const compilationTarget = metadata.settings.compilationTarget; const targets = Object.keys(compilationTarget);