@@ -4,8 +4,10 @@ import {
44 useWaitForTransactionReceipt ,
55 useWriteContract ,
66 usePublicClient ,
7+ useEstimateGas ,
8+ useAccount ,
79} from 'wagmi' ;
8- import { Address } from 'viem' ;
10+ import { Address , encodeFunctionData } from 'viem' ;
911
1012import { dashboardAbi } from 'abi/dashboard-abi' ;
1113import { useDappStatus } from 'modules/web3/hooks/use-dapp-status' ;
@@ -15,6 +17,13 @@ import {
1517 SubmitStepEnum ,
1618} from 'shared/components/submit-modal/types' ;
1719import invariant from 'tiny-invariant' ;
20+ import { useVaultPermissions } from 'modules/vaults/hooks/use-vault-permissions' ;
21+
22+ type BurnArgs = {
23+ token : string ;
24+ amount : bigint ;
25+ setModalState : ( submitStep : { step : SubmitStep ; tx ?: Address } ) => void ;
26+ } ;
1827
1928export const useBurn = ( onMutate = ( ) => { } ) => {
2029 const { chainId } = useDappStatus ( ) ;
@@ -34,15 +43,7 @@ export const useBurn = (onMutate = () => {}) => {
3443 } ) ;
3544
3645 const callBurn = useCallback (
37- async ( {
38- token,
39- amount,
40- setModalState,
41- } : {
42- token : string ;
43- amount : bigint ;
44- setModalState : ( submitStep : { step : SubmitStep ; tx ?: Address } ) => void ;
45- } ) => {
46+ async ( { token, amount, setModalState } : BurnArgs ) => {
4647 invariant ( publicClient , '[useBurn] publicClient is undefined' ) ;
4748
4849 setModalState ( { step : SubmitStepEnum . confirming } ) ;
@@ -70,3 +71,32 @@ export const useBurn = (onMutate = () => {}) => {
7071 burnReceipt,
7172 } ;
7273} ;
74+
75+ type EstimateGasBurnProps = {
76+ token : string ;
77+ amount : bigint ;
78+ } ;
79+
80+ export const useEstimateGasBurn = ( { token, amount } : EstimateGasBurnProps ) => {
81+ const { hasPermission } = useVaultPermissions ( 'repayer' ) ;
82+ const { address } = useAccount ( ) ;
83+ const payload = [ amount ?? 1n ] as const ;
84+ const functionName = token === 'stETH' ? 'burnStETH' : 'burnWstETH' ;
85+ const { activeVault } = useVaultInfo ( ) ;
86+ const owner = activeVault ?. owner ;
87+
88+ const enabled = ! ! ( hasPermission && address ) ;
89+
90+ return useEstimateGas ( {
91+ to : owner ,
92+ account : address ,
93+ data : encodeFunctionData ( {
94+ abi : dashboardAbi ,
95+ functionName,
96+ args : payload ,
97+ } ) ,
98+ query : {
99+ enabled,
100+ } ,
101+ } ) ;
102+ } ;
0 commit comments