Skip to content

Commit 7675de4

Browse files
Merge pull request #815 from scaffold-eth/backmerge-wagmiv2
2 parents 3a5b515 + 7b401f1 commit 7675de4

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+704
-642
lines changed

.changeset/strong-beers-compare.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
"create-eth": patch
3+
---
4+
5+
- Wagmi v2 migration (#700)
6+
- Tailwind dark variant working (#810)
7+
- Gitignored dist folder and updated gitigore files (#804)
8+
- Fixed the main frontend path in README (#808)

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@ node_modules/
1212
!.yarn/versions
1313

1414
# macos files
15-
.DS_Store
15+
.DS_Store

README.md

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -77,13 +77,12 @@ Visit your app on: `http://localhost:3000`. You can interact with your smart con
7777

7878
Run smart contract test with `yarn hardhat:test` or `yarn foundry:test` depending of your solidity framework.
7979

80-
- Edit your smart contract:
81-
- Hardhat => `YourContract.sol` in `packages/hardhat/contracts`
82-
- Foundry => `YourContract.sol` in `packages/foundry/contracts`
83-
- Edit your frontend in `packages/nextjs/pages`
84-
- Edit your deployment scripts:
85-
- Hardhat => `packages/hardhat/deploy`
86-
- Foundry => `packages/foundry/script`
80+
**What's next**:
81+
82+
- Edit your smart contract `YourContract.sol` in `packages/hardhat/contracts`
83+
- Edit your frontend homepage at `packages/nextjs/app/page.tsx`. For guidance on [routing](https://nextjs.org/docs/app/building-your-application/routing/defining-routes) and configuring [pages/layouts](https://nextjs.org/docs/app/building-your-application/routing/pages-and-layouts) checkout the Next.js documentation.
84+
- Edit your deployment scripts in `packages/hardhat/deploy`
85+
- Edit your smart contract test in: `packages/hardhat/test`. To run test use `yarn hardhat:test`
8786

8887
## Documentation
8988

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,26 @@
11
const contents = () =>
2-
`node_modules
2+
`# dependencies
3+
node_modules
34
4-
# dependencies, yarn, etc
5-
# yarn / eslint
5+
# yarn
66
.yarn/*
77
!.yarn/patches
88
!.yarn/plugins
99
!.yarn/releases
1010
!.yarn/sdks
1111
!.yarn/versions
12+
13+
# eslint
1214
.eslintcache
13-
.vscode/**
15+
16+
# misc
1417
.DS_Store
18+
19+
# IDE
1520
.vscode
1621
.idea
17-
.vercel`;
22+
23+
# cli
24+
dist`;
1825

1926
export default contents

templates/base/packages/nextjs/.gitignore.template.mjs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ const contents = () =>
1212
# next.js
1313
/.next/
1414
/out/
15+
.vercel
1516
1617
# production
1718
/build
@@ -34,7 +35,6 @@ yarn-error.log*
3435
.env.production.local
3536
3637
# typescript
37-
*.tsbuildinfo
38-
.vercel`
38+
*.tsbuildinfo`
3939

4040
export default contents

templates/base/packages/nextjs/app/blockexplorer/_components/SearchBar.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export const SearchBar = () => {
1616
event.preventDefault();
1717
if (isHex(searchInput)) {
1818
try {
19-
const tx = await client.getTransaction({ hash: searchInput });
19+
const tx = await client?.getTransaction({ hash: searchInput });
2020
if (tx) {
2121
router.push(`/blockexplorer/transaction/${searchInput}`);
2222
return;

templates/base/packages/nextjs/app/blockexplorer/transaction/[txHash]/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ const TransactionPage: NextPage<PageProps> = ({ params }: PageProps) => {
2525
const { targetNetwork } = useTargetNetwork();
2626

2727
useEffect(() => {
28-
if (txHash) {
28+
if (txHash && client) {
2929
const fetchTransaction = async () => {
3030
const tx = await client.getTransaction({ hash: txHash });
3131
const receipt = await client.getTransactionReceipt({ hash: txHash });

templates/base/packages/nextjs/app/debug/_components/contract/DisplayVariable.tsx

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@ import { InheritanceTooltip } from "./InheritanceTooltip";
55
import { displayTxResult } from "./utilsDisplay";
66
import { Abi, AbiFunction } from "abitype";
77
import { Address } from "viem";
8-
import { useContractRead } from "wagmi";
8+
import { useReadContract } from "wagmi";
99
import { ArrowPathIcon } from "@heroicons/react/24/outline";
1010
import { useAnimationConfig } from "~~/hooks/scaffold-eth";
11-
import { notification } from "~~/utils/scaffold-eth";
11+
import { useTargetNetwork } from "~~/hooks/scaffold-eth/useTargetNetwork";
12+
import { getParsedError, notification } from "~~/utils/scaffold-eth";
1213

1314
type DisplayVariableProps = {
1415
contractAddress: Address;
@@ -25,16 +26,20 @@ export const DisplayVariable = ({
2526
abi,
2627
inheritedFrom,
2728
}: DisplayVariableProps) => {
29+
const { targetNetwork } = useTargetNetwork();
30+
2831
const {
2932
data: result,
3033
isFetching,
3134
refetch,
32-
} = useContractRead({
35+
error,
36+
} = useReadContract({
3337
address: contractAddress,
3438
functionName: abiFunction.name,
3539
abi: abi,
36-
onError: error => {
37-
notification.error(error.message);
40+
chainId: targetNetwork.id,
41+
query: {
42+
retry: false,
3843
},
3944
});
4045

@@ -44,6 +49,13 @@ export const DisplayVariable = ({
4449
refetch();
4550
}, [refetch, refreshDisplayVariables]);
4651

52+
useEffect(() => {
53+
if (error) {
54+
const parsedError = getParsedError(error);
55+
notification.error(parsedError);
56+
}
57+
}, [error]);
58+
4759
return (
4860
<div className="space-y-1 pb-2">
4961
<div className="flex items-center">

templates/base/packages/nextjs/app/debug/_components/contract/ReadOnlyFunctionForm.tsx

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
"use client";
22

3-
import { useState } from "react";
3+
import { useEffect, useState } from "react";
44
import { InheritanceTooltip } from "./InheritanceTooltip";
55
import { Abi, AbiFunction } from "abitype";
66
import { Address } from "viem";
7-
import { useContractRead } from "wagmi";
7+
import { useReadContract } from "wagmi";
88
import {
99
ContractInput,
1010
displayTxResult,
@@ -13,6 +13,7 @@ import {
1313
getParsedContractFunctionArgs,
1414
transformAbiFunction,
1515
} from "~~/app/debug/_components/contract";
16+
import { useTargetNetwork } from "~~/hooks/scaffold-eth/useTargetNetwork";
1617
import { getParsedError, notification } from "~~/utils/scaffold-eth";
1718

1819
type ReadOnlyFunctionFormProps = {
@@ -30,19 +31,27 @@ export const ReadOnlyFunctionForm = ({
3031
}: ReadOnlyFunctionFormProps) => {
3132
const [form, setForm] = useState<Record<string, any>>(() => getInitialFormState(abiFunction));
3233
const [result, setResult] = useState<unknown>();
34+
const { targetNetwork } = useTargetNetwork();
3335

34-
const { isFetching, refetch } = useContractRead({
36+
const { isFetching, refetch, error } = useReadContract({
3537
address: contractAddress,
3638
functionName: abiFunction.name,
3739
abi: abi,
3840
args: getParsedContractFunctionArgs(form),
39-
enabled: false,
40-
onError: (error: any) => {
41-
const parsedErrror = getParsedError(error);
42-
notification.error(parsedErrror);
41+
chainId: targetNetwork.id,
42+
query: {
43+
enabled: false,
44+
retry: false,
4345
},
4446
});
4547

48+
useEffect(() => {
49+
if (error) {
50+
const parsedError = getParsedError(error);
51+
notification.error(parsedError);
52+
}
53+
}, [error]);
54+
4655
const transformedFunction = transformAbiFunction(abiFunction);
4756
const inputElements = transformedFunction.inputs.map((input, inputIndex) => {
4857
const key = getFunctionInputKey(abiFunction.name, input, inputIndex);

templates/base/packages/nextjs/app/debug/_components/contract/WriteOnlyFunctionForm.tsx

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { useEffect, useState } from "react";
44
import { InheritanceTooltip } from "./InheritanceTooltip";
55
import { Abi, AbiFunction } from "abitype";
66
import { Address, TransactionReceipt } from "viem";
7-
import { useContractWrite, useNetwork, useWaitForTransaction } from "wagmi";
7+
import { useAccount, useWaitForTransactionReceipt, useWriteContract } from "wagmi";
88
import {
99
ContractInput,
1010
TxReceipt,
@@ -34,26 +34,24 @@ export const WriteOnlyFunctionForm = ({
3434
}: WriteOnlyFunctionFormProps) => {
3535
const [form, setForm] = useState<Record<string, any>>(() => getInitialFormState(abiFunction));
3636
const [txValue, setTxValue] = useState<string | bigint>("");
37-
const { chain } = useNetwork();
37+
const { chain } = useAccount();
3838
const writeTxn = useTransactor();
3939
const { targetNetwork } = useTargetNetwork();
4040
const writeDisabled = !chain || chain?.id !== targetNetwork.id;
4141

42-
const {
43-
data: result,
44-
isLoading,
45-
writeAsync,
46-
} = useContractWrite({
47-
address: contractAddress,
48-
functionName: abiFunction.name,
49-
abi: abi,
50-
args: getParsedContractFunctionArgs(form),
51-
});
42+
const { data: result, isPending, writeContractAsync } = useWriteContract();
5243

5344
const handleWrite = async () => {
54-
if (writeAsync) {
45+
if (writeContractAsync) {
5546
try {
56-
const makeWriteWithParams = () => writeAsync({ value: BigInt(txValue) });
47+
const makeWriteWithParams = () =>
48+
writeContractAsync({
49+
address: contractAddress,
50+
functionName: abiFunction.name,
51+
abi: abi,
52+
args: getParsedContractFunctionArgs(form),
53+
value: BigInt(txValue),
54+
});
5755
await writeTxn(makeWriteWithParams);
5856
onChange();
5957
} catch (e: any) {
@@ -63,8 +61,8 @@ export const WriteOnlyFunctionForm = ({
6361
};
6462

6563
const [displayedTxResult, setDisplayedTxResult] = useState<TransactionReceipt>();
66-
const { data: txResult } = useWaitForTransaction({
67-
hash: result?.hash,
64+
const { data: txResult } = useWaitForTransactionReceipt({
65+
hash: result,
6866
});
6967
useEffect(() => {
7068
setDisplayedTxResult(txResult);
@@ -126,8 +124,8 @@ export const WriteOnlyFunctionForm = ({
126124
}`}
127125
data-tip={`${writeDisabled && "Wallet not connected or in the wrong network"}`}
128126
>
129-
<button className="btn btn-secondary btn-sm" disabled={writeDisabled || isLoading} onClick={handleWrite}>
130-
{isLoading && <span className="loading loading-spinner loading-xs"></span>}
127+
<button className="btn btn-secondary btn-sm" disabled={writeDisabled || isPending} onClick={handleWrite}>
128+
{isPending && <span className="loading loading-spinner loading-xs"></span>}
131129
Send 💸
132130
</button>
133131
</div>

0 commit comments

Comments
 (0)