diff --git a/.changeset/backmerge-29-07-26.md b/.changeset/backmerge-29-07-26.md
new file mode 100644
index 0000000000..3bbda76831
--- /dev/null
+++ b/.changeset/backmerge-29-07-26.md
@@ -0,0 +1,6 @@
+---
+"create-eth": patch
+---
+
+- fix: pin @coinbase/cdp-sdk to 1.52.0 to avoid @x402 module-not-found (https://github.com/scaffold-eth/scaffold-eth-2/pull/1310)
+- web3 deps update (https://github.com/scaffold-eth/scaffold-eth-2/pull/1281)
diff --git a/templates/base/package.json b/templates/base/package.json
index 9da73659de..c9d416c7d7 100644
--- a/templates/base/package.json
+++ b/templates/base/package.json
@@ -27,6 +27,9 @@
"husky": "~9.1.6",
"lint-staged": "~13.2.2"
},
+ "resolutions": {
+ "@coinbase/cdp-sdk": "1.52.0"
+ },
"engines": {
"node": ">=20.18.3"
}
diff --git a/templates/base/packages/nextjs/app/blockexplorer/_components/ContractTabs.tsx b/templates/base/packages/nextjs/app/blockexplorer/_components/ContractTabs.tsx
index 760c7ae83d..4992dcc65b 100644
--- a/templates/base/packages/nextjs/app/blockexplorer/_components/ContractTabs.tsx
+++ b/templates/base/packages/nextjs/app/blockexplorer/_components/ContractTabs.tsx
@@ -32,7 +32,7 @@ export const ContractTabs = ({ address, contractData }: PageProps) => {
useEffect(() => {
const checkIsContract = async () => {
- const contractCode = await publicClient.getBytecode({ address: address });
+ const contractCode = await publicClient.getCode({ address: address });
setIsContract(contractCode !== undefined && contractCode !== "0x");
};
diff --git a/templates/base/packages/nextjs/app/blockexplorer/_components/SearchBar.tsx b/templates/base/packages/nextjs/app/blockexplorer/_components/SearchBar.tsx
index 28c68c9b1e..f8e7bbe941 100644
--- a/templates/base/packages/nextjs/app/blockexplorer/_components/SearchBar.tsx
+++ b/templates/base/packages/nextjs/app/blockexplorer/_components/SearchBar.tsx
@@ -12,7 +12,7 @@ export const SearchBar = () => {
const client = usePublicClient({ chainId: hardhat.id });
- const handleSearch = async (event: React.FormEvent) => {
+ const handleSearch = async (event: React.SubmitEvent) => {
event.preventDefault();
if (isHex(searchInput)) {
try {
diff --git a/templates/base/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/AddressInfoDropdown.tsx b/templates/base/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/AddressInfoDropdown.tsx
index 4ba89a132a..310d3c2602 100644
--- a/templates/base/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/AddressInfoDropdown.tsx
+++ b/templates/base/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/AddressInfoDropdown.tsx
@@ -4,7 +4,7 @@ import { getAddress } from "viem";
import { Address } from "viem";
import { useAccount, useDisconnect } from "wagmi";
import {
- ArrowLeftOnRectangleIcon,
+ ArrowLeftEndOnRectangleIcon,
ArrowTopRightOnSquareIcon,
ArrowsRightLeftIcon,
CheckCircleIcon,
@@ -127,7 +127,7 @@ export const AddressInfoDropdown = ({
type="button"
onClick={() => disconnect()}
>
- Disconnect
+ Disconnect
diff --git a/templates/base/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/WrongNetworkDropdown.tsx b/templates/base/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/WrongNetworkDropdown.tsx
index eea522cdcb..82c70512bf 100644
--- a/templates/base/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/WrongNetworkDropdown.tsx
+++ b/templates/base/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/WrongNetworkDropdown.tsx
@@ -1,6 +1,6 @@
import { NetworkOptions } from "./NetworkOptions";
import { useDisconnect } from "wagmi";
-import { ArrowLeftOnRectangleIcon, ChevronDownIcon } from "@heroicons/react/24/outline";
+import { ArrowLeftEndOnRectangleIcon, ChevronDownIcon } from "@heroicons/react/24/outline";
export const WrongNetworkDropdown = () => {
const { disconnect } = useDisconnect();
@@ -15,7 +15,7 @@ export const WrongNetworkDropdown = () => {
diff --git a/templates/base/packages/nextjs/eslint.config.mjs b/templates/base/packages/nextjs/eslint.config.mjs
index 3a337f76ed..10573a40c5 100644
--- a/templates/base/packages/nextjs/eslint.config.mjs
+++ b/templates/base/packages/nextjs/eslint.config.mjs
@@ -25,4 +25,16 @@ export default defineConfig([
},
ignores: [".next", "next-env.d.ts"],
},
+ {
+ files: ["**/*.ts", "**/*.tsx"],
+ languageOptions: {
+ parserOptions: {
+ projectService: true,
+ tsconfigRootDir: import.meta.dirname,
+ },
+ },
+ rules: {
+ "@typescript-eslint/no-deprecated": "warn",
+ },
+ },
]);
diff --git a/templates/base/packages/nextjs/hooks/scaffold-eth/useDeployedContractInfo.ts b/templates/base/packages/nextjs/hooks/scaffold-eth/useDeployedContractInfo.ts
index 3d58526cd8..a7a2261d7f 100644
--- a/templates/base/packages/nextjs/hooks/scaffold-eth/useDeployedContractInfo.ts
+++ b/templates/base/packages/nextjs/hooks/scaffold-eth/useDeployedContractInfo.ts
@@ -60,7 +60,7 @@ export function useDeployedContractInfo(
return;
}
- const code = await publicClient.getBytecode({
+ const code = await publicClient.getCode({
address: deployedContract.address,
});
diff --git a/templates/base/packages/nextjs/hooks/scaffold-eth/useScaffoldReadContract.ts b/templates/base/packages/nextjs/hooks/scaffold-eth/useScaffoldReadContract.ts
index 82dfe3dc97..376dbb6ab3 100644
--- a/templates/base/packages/nextjs/hooks/scaffold-eth/useScaffoldReadContract.ts
+++ b/templates/base/packages/nextjs/hooks/scaffold-eth/useScaffoldReadContract.ts
@@ -14,7 +14,7 @@ import {
} from "~~/utils/scaffold-eth/contract";
/**
- * Wrapper around wagmi's useContractRead hook which automatically loads (by name) the contract ABI and address from
+ * Wrapper around wagmi's useReadContract hook which automatically loads (by name) the contract ABI and address from
* the contracts present in deployedContracts.ts & externalContracts.ts corresponding to targetNetworks configured in scaffold.config.ts
* @param config - The config settings, including extra wagmi configuration
* @param config.contractName - deployed contract name
diff --git a/templates/base/packages/nextjs/package.json b/templates/base/packages/nextjs/package.json
index 157ec657cd..3f492e5a63 100644
--- a/templates/base/packages/nextjs/package.json
+++ b/templates/base/packages/nextjs/package.json
@@ -17,14 +17,14 @@
},
"dependencies": {
"@heroicons/react": "~2.2.0",
- "@rainbow-me/rainbowkit": "2.2.9",
+ "@rainbow-me/rainbowkit": "2.2.11",
"@react-native-async-storage/async-storage": "~2.2.0",
"@scaffold-ui/components": "^0.1.12",
"@scaffold-ui/debug-contracts": "^0.1.11",
"@scaffold-ui/hooks": "^0.1.8",
- "@tanstack/react-query": "~5.59.15",
+ "@tanstack/react-query": "~5.100.5",
"blo": "~2.0.0",
- "burner-connector": "0.0.20",
+ "burner-connector": "0.0.21",
"daisyui": "5.5.19",
"kubo-rpc-client": "~6.1.0",
"next": "~16.2.4",
@@ -35,7 +35,7 @@
"react-dom": "~19.2.5",
"react-hot-toast": "~2.6.0",
"usehooks-ts": "~3.1.1",
- "viem": "2.39.0",
+ "viem": "2.53.1",
"wagmi": "2.19.5",
"zustand": "~5.0.12"
},
@@ -44,7 +44,7 @@
"@trivago/prettier-plugin-sort-imports": "~6.0.2",
"@types/node": "~18.19.130",
"@types/react": "~19.2.14",
- "abitype": "1.0.6",
+ "abitype": "1.2.4",
"bgipfs": "~0.0.18",
"eslint": "~9.39.0",
"eslint-config-next": "~16.2.4",
diff --git a/templates/base/packages/nextjs/services/web3/wagmiConnectors.tsx b/templates/base/packages/nextjs/services/web3/wagmiConnectors.tsx
index a890e715ce..21c6e58eb1 100644
--- a/templates/base/packages/nextjs/services/web3/wagmiConnectors.tsx
+++ b/templates/base/packages/nextjs/services/web3/wagmiConnectors.tsx
@@ -1,6 +1,6 @@
import { connectorsForWallets } from "@rainbow-me/rainbowkit";
import {
- baseAccount,
+ base,
ledgerWallet,
metaMaskWallet,
rainbowWallet,
@@ -21,7 +21,7 @@ const wallets = [
metaMaskWallet,
walletConnectWallet,
ledgerWallet,
- baseAccount,
+ base,
rainbowWallet,
safeWallet,
...(showBurnerWallet ? [rainbowkitBurnerWallet] : []),