Skip to main content

Overview

The SuiModule provides native SUI blockchain operations including message signing, transaction signing, sending transactions, and network queries. Access it via DynamicSDK.instance.sui.

Prerequisites

Get Network Name

Query the network name for the connected SUI wallet.
final sdk = DynamicSDK.instance;
final wallet = sdk.wallets.userWallets.first;

final network = await sdk.sui.getNetworkName(
  walletId: wallet.id,
);
print('Network: $network'); // e.g., "mainnet", "testnet"

Sign a Message

Sign a message using the connected SUI wallet.
final signature = await sdk.sui.signMessage(
  walletId: wallet.id,
  message: 'Hello, SUI!',
);
print('Signature: $signature');

Sign a Transaction

Sign a raw base64-encoded SUI transaction without sending it.
final signature = await sdk.sui.signTransaction(
  walletId: wallet.id,
  transaction: 'base64EncodedTransaction...',
);
print('Signature: $signature');

Sign a Transfer Transaction

Sign a transfer transaction built from parameters. The SDK constructs the transaction internally.
final signature = await sdk.sui.signTransferTransaction(
  walletId: wallet.id,
  to: '0xRecipientAddress...',
  value: '0.001', // amount in SUI
  gasPrice: 1000,   // optional
  gasBudget: 50000, // optional
);
print('Signature: $signature');
ParameterTypeDescription
walletIdStringThe wallet ID to sign with
toStringRecipient SUI address
valueStringAmount in SUI
gasPriceint?Optional gas price override
gasBudgetint?Optional gas budget override

Send a Transaction

Send a raw base64-encoded SUI transaction to the network. Returns the transaction digest.
final digest = await sdk.sui.sendTransaction(
  walletId: wallet.id,
  transaction: 'base64EncodedTransaction...',
);
print('Transaction digest: $digest');

Sign and Send a Transaction

Sign and send a raw transaction in one step.
final digest = await sdk.sui.signAndSendTransaction(
  walletId: wallet.id,
  transaction: 'base64EncodedTransaction...',
);
print('Transaction digest: $digest');

Sign and Send a Transfer

The most convenient way to send SUI: provide the recipient and amount, and the SDK handles the rest.
final digest = await sdk.sui.signAndSendTransferTransaction(
  walletId: wallet.id,
  to: '0xRecipientAddress...',
  value: '0.001',
);
print('Transaction digest: $digest');

With Custom Gas Settings

final digest = await sdk.sui.signAndSendTransferTransaction(
  walletId: wallet.id,
  to: '0xRecipientAddress...',
  value: '1.0',
  gasPrice: 1000,
  gasBudget: 50000,
);

Complete Example

import 'package:dynamic_sdk/dynamic_sdk.dart';

Future<void> suiExample() async {
  final sdk = DynamicSDK.instance;
  final wallet = sdk.wallets.userWallets.first;

  // Check network
  final network = await sdk.sui.getNetworkName(walletId: wallet.id);
  print('Connected to: $network');

  // Sign a message
  final signature = await sdk.sui.signMessage(
    walletId: wallet.id,
    message: 'Verify wallet ownership',
  );
  print('Signature: $signature');

  // Send SUI directly
  final digest = await sdk.sui.signAndSendTransferTransaction(
    walletId: wallet.id,
    to: '0x...',
    value: '0.001',
  );
  print('Transaction digest: $digest');
}

API Reference

MethodReturnsDescription
getNetworkNameFuture<String>Get network name
signMessageFuture<String>Sign a message
signTransactionFuture<String>Sign a raw transaction
signTransferTransactionFuture<String>Sign a transfer built from params
sendTransactionFuture<String>Send a raw transaction, returns digest
signAndSendTransactionFuture<String>Sign + send raw transaction
signAndSendTransferTransactionFuture<String>Sign + send transfer, returns digest

Next Steps