@@ -5,8 +5,10 @@ import {
55} from '@zetachain/toolkit/chains/bitcoin' ;
66import { evmCall } from '@zetachain/toolkit/chains/evm' ;
77import { solanaCall } from '@zetachain/toolkit/chains/solana' ;
8+ import { prepareSuiDepositAndCall } from '@zetachain/toolkit/chains/sui' ;
89import { type PrimaryWallet } from '@zetachain/wallet' ;
910import { getSolanaWalletAdapter } from '@zetachain/wallet/solana' ;
11+ import { getSuiWallet , getSuiWalletClient } from '@zetachain/wallet/sui' ;
1012import { ZeroAddress } from 'ethers' ;
1113import { useCallback } from 'react' ;
1214
@@ -122,6 +124,43 @@ async function handleSolanaCall(
122124 callbacks . onTransactionConfirmed ?.( result ) ;
123125}
124126
127+ /**
128+ * Handles Sui-specific call logic
129+ */
130+ async function handleSuiCall (
131+ callParams : CallParams ,
132+ primaryWallet : PrimaryWallet ,
133+ callbacks : {
134+ onSigningStart ?: UseHandleCallParams [ 'onSigningStart' ] ;
135+ onTransactionSubmitted ?: UseHandleCallParams [ 'onTransactionSubmitted' ] ;
136+ onTransactionConfirmed ?: UseHandleCallParams [ 'onTransactionConfirmed' ] ;
137+ }
138+ ) : Promise < void > {
139+ const suiWallet = getSuiWallet ( primaryWallet ) ;
140+ const walletClient = await getSuiWalletClient ( primaryWallet ) ;
141+
142+ callbacks . onSigningStart ?.( ) ;
143+
144+ const { transaction } = await prepareSuiDepositAndCall (
145+ { ...callParams , amount : '0.001' } ,
146+ {
147+ chainId : '103' ,
148+ }
149+ ) ;
150+
151+ const signedTransaction = await suiWallet . signTransaction ( transaction ) ;
152+
153+ const executionResult = await walletClient . executeTransactionBlock ( {
154+ options : { } ,
155+ signature : signedTransaction . signature ,
156+ transactionBlock : signedTransaction . bytes ,
157+ } ) ;
158+
159+ callbacks . onTransactionSubmitted ?.( ) ;
160+
161+ callbacks . onTransactionConfirmed ?.( executionResult . digest ) ;
162+ }
163+
125164/**
126165 * Handles Bitcoin-specific call logic using Unisat + Signet
127166 */
@@ -277,6 +316,11 @@ export function useHandleCall({
277316 selectedProvider ,
278317 callbacks
279318 ) ;
319+ } else if ( walletType === 'SUI' ) {
320+ if ( ! primaryWallet ) {
321+ throw new Error ( 'Sui transactions require primaryWallet' ) ;
322+ }
323+ await handleSuiCall ( callParams , primaryWallet , callbacks ) ;
280324 } else if ( walletType === 'SOL' ) {
281325 if ( ! primaryWallet ) {
282326 throw new Error ( 'Solana transactions require primaryWallet' ) ;
0 commit comments