1
1
import { useEffect , useState } from "react" ;
2
2
import { MutateOptions } from "@tanstack/react-query" ;
3
3
import { Abi , ExtractAbiFunctionNames } from "abitype" ;
4
- import { Config , UseWriteContractParameters , useAccount , useWriteContract } from "wagmi" ;
4
+ import { Config , UseWriteContractParameters , useAccount , useConfig , useWriteContract } from "wagmi" ;
5
5
import { WriteContractErrorType , WriteContractReturnType } from "wagmi/actions" ;
6
6
import { WriteContractVariables } from "wagmi/query" ;
7
7
import { useSelectedNetwork } from "~~/hooks/scaffold-eth" ;
@@ -13,6 +13,7 @@ import {
13
13
ScaffoldWriteContractOptions ,
14
14
ScaffoldWriteContractVariables ,
15
15
UseScaffoldWriteConfig ,
16
+ simulateContractWriteAndNotifyError ,
16
17
} from "~~/utils/scaffold-eth/contract" ;
17
18
18
19
type ScaffoldWriteContractReturnType < TContractName extends ContractName > = Omit <
@@ -60,6 +61,8 @@ export function useScaffoldWriteContract<TContractName extends ContractName>(
60
61
: ( configOrName as UseScaffoldWriteConfig < TContractName > ) ;
61
62
const { contractName, chainId, writeContractParams : finalWriteContractParams } = finalConfig ;
62
63
64
+ const wagmiConfig = useConfig ( ) ;
65
+
63
66
useEffect ( ( ) => {
64
67
if ( typeof configOrName === "string" ) {
65
68
console . warn (
@@ -105,13 +108,20 @@ export function useScaffoldWriteContract<TContractName extends ContractName>(
105
108
try {
106
109
setIsMining ( true ) ;
107
110
const { blockConfirmations, onBlockConfirmation, ...mutateOptions } = options || { } ;
111
+
112
+ const writeContractObject = {
113
+ abi : deployedContractData . abi as Abi ,
114
+ address : deployedContractData . address ,
115
+ ...variables ,
116
+ } as WriteContractVariables < Abi , string , any [ ] , Config , number > ;
117
+
118
+ if ( ! finalConfig ?. disableSimulate ) {
119
+ await simulateContractWriteAndNotifyError ( { wagmiConfig, writeContractParams : writeContractObject } ) ;
120
+ }
121
+
108
122
const makeWriteWithParams = ( ) =>
109
123
wagmiContractWrite . writeContractAsync (
110
- {
111
- abi : deployedContractData . abi as Abi ,
112
- address : deployedContractData . address ,
113
- ...variables ,
114
- } as WriteContractVariables < Abi , string , any [ ] , Config , number > ,
124
+ writeContractObject ,
115
125
mutateOptions as
116
126
| MutateOptions <
117
127
WriteContractReturnType ,
0 commit comments