Troubleshooting & Error Handling
Quick patterns
1) Vanilla (ethers)
import { getVault } from "@concrete-xyz/sdk";
import { ethers } from "ethers";
const provider = new ethers.JsonRpcProvider(process.env.RPC_URL!);
const vault = getVault("v2", "0xYourVault", chainId, provider);
async function safeGetDetails() {
try {
const details = await vault.getVaultDetails();
return details;
} catch (err: any) {
if (err.code === "NETWORK_ERROR") {
// RPC down or bad URL
throw new Error("RPC unavailable: check RPC_URL and network.");
}
if (err.code === "CALL_EXCEPTION") {
// Wrong chain, wrong address, or ABI mismatch
throw new Error("Call failed: verify vault address and network match.");
}
throw err;
}
}
2) Wagmi and React Query
import { useVault, useVaultQuery } from "@concrete-xyz/sdk/wagmi";
const vaultConfig = {
version: "v2",
address: "0xYourVault",
chainId: 1,
} as const;
export function UseDetails() {
const vault = useVault(vaultConfig);
const query = useVaultQuery({
vault: vaultConfig,
queryKey: ["vaultDetails"],
enabled: !!vault, // Avoid running before the hook resolves
queryFn: (v) => v.getVaultDetails(),
retry: 2,
staleTime: 30_000,
});
if (query.isLoading) return <div>Loading...</div>;
if (query.isError) return <div>Failed to load vault details. {String(query.error)}</div>;
return <pre>{JSON.stringify(query.data, null, 2)}</pre>;
}