Skip to content

Commit 704f447

Browse files
committed
Implement toolkit function
1 parent 782d757 commit 704f447

File tree

3 files changed

+49
-5
lines changed

3 files changed

+49
-5
lines changed

examples/hello/frontend/src/DynamicAppContent.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ export function DynamicAppContent() {
1919
return 901;
2020
}
2121

22-
if (network === '503') {
23-
return 105;
22+
if (network === '502') {
23+
return 103;
2424
}
2525

2626
return null;

examples/hello/frontend/src/constants/chains.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,9 @@ export const SUPPORTED_CHAINS: SupportedChain[] = [
7070
colorHex: '#F7931A',
7171
},
7272
{
73-
explorerUrl: (txHash: string) => `https://suiscan.xyz/devnet/tx/${txHash}`,
74-
name: 'Sui Devnet',
75-
chainId: 105,
73+
explorerUrl: (txHash: string) => `https://suiscan.xyz/testnet/tx/${txHash}`,
74+
name: 'Sui Testnet',
75+
chainId: 103,
7676
chainType: 'SUI',
7777
colorHex: '#4DA2FF',
7878
},

examples/hello/frontend/src/hooks/useHandleCall.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ import {
55
} from '@zetachain/toolkit/chains/bitcoin';
66
import { evmCall } from '@zetachain/toolkit/chains/evm';
77
import { solanaCall } from '@zetachain/toolkit/chains/solana';
8+
import { prepareSuiDepositAndCall } from '@zetachain/toolkit/chains/sui';
89
import { type PrimaryWallet } from '@zetachain/wallet';
910
import { getSolanaWalletAdapter } from '@zetachain/wallet/solana';
11+
import { getSuiWallet, getSuiWalletClient } from '@zetachain/wallet/sui';
1012
import { ZeroAddress } from 'ethers';
1113
import { 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

Comments
 (0)