Skip to main content
The Unity SDK supports SUI blockchain operations including transfers, message signing, and raw transaction signing.

Sign and send SUI transfer

// Sign only (does not broadcast)
string signature = await DynamicSDK.Instance.Networks.Sui.SignTransferTransaction(
    wallet.Id, "0xRecipientAddress", "0.1");

// Sign and broadcast
string digest = await DynamicSDK.Instance.Networks.Sui.SignAndSendTransferTransaction(
    wallet.Id, "0xRecipientAddress", "0.1");

Debug.Log($"Transaction digest: {digest}");

Sign message

string signature = await DynamicSDK.Instance.Networks.Sui.SignMessage(
    wallet.Id, "Hello from SUI");

Sign raw transaction

Sign a base64-encoded transaction:
string signature = await DynamicSDK.Instance.Networks.Sui.SignTransaction(
    wallet.Id, base64TransactionBytes);

Send raw transaction

Send a base64-encoded transaction:
string digest = await DynamicSDK.Instance.Networks.Sui.SendTransaction(
    wallet.Id, base64TransactionBytes);

Complete example

using DynamicSDK.Core;
using UnityEngine;
using System.Linq;

public class SuiTransactionManager : MonoBehaviour
{
    private BaseWallet _suiWallet;
    
    private void Start()
    {
        _suiWallet = DynamicSDK.Instance.Wallets.UserWallets
            .FirstOrDefault(w => w.Chain.ToUpper() == "SUI");
        
        if (_suiWallet != null)
        {
            Debug.Log($"SUI wallet found: {_suiWallet.Address}");
        }
    }
    
    public async void SendSui(string toAddress, string amount)
    {
        if (_suiWallet == null)
        {
            Debug.LogError("No SUI wallet available");
            return;
        }
        
        try
        {
            string digest = await DynamicSDK.Instance.Networks.Sui.SignAndSendTransferTransaction(
                _suiWallet.Id, toAddress, amount);
            
            Debug.Log($"Transaction sent!");
            Debug.Log($"Digest: {digest}");
        }
        catch (System.Exception ex)
        {
            Debug.LogError($"Transaction failed: {ex.Message}");
        }
    }
    
    public async void SignMessage()
    {
        if (_suiWallet == null)
        {
            Debug.LogError("No SUI wallet available");
            return;
        }
        
        string message = "Hello from SUI!";
        
        try
        {
            string signature = await DynamicSDK.Instance.Networks.Sui.SignMessage(
                _suiWallet.Id, message);
            
            Debug.Log($"Message signed successfully");
            Debug.Log($"Signature: {signature}");
        }
        catch (System.Exception ex)
        {
            Debug.LogError($"Signing failed: {ex.Message}");
        }
    }
    
    public async void SignTransferOnly(string toAddress, string amount)
    {
        if (_suiWallet == null)
        {
            Debug.LogError("No SUI wallet available");
            return;
        }
        
        // Sign without broadcasting (useful for multi-sig or delayed execution)
        string signature = await DynamicSDK.Instance.Networks.Sui.SignTransferTransaction(
            _suiWallet.Id, toAddress, amount);
        
        Debug.Log($"Transaction signed (not broadcast)");
        Debug.Log($"Signature: {signature}");
    }
}

Next steps