Extension Wallet
Integration
SUI Network
Sign & Execute Transaction

Sign and Execute Transaction

Cosmostation’s Sui provider supports both the TransactionBlock (v1) flow and the newer Transaction (v2) flow. Depending on which Sui SDK / app stack you use, you can:

  • Sign only (submit later with your own RPC client)
  • Sign and execute (wallet signs and broadcasts in one step)

This section documents the following supported features:

  • sui:signTransactionBlock (v1)
  • sui:signAndExecuteTransactionBlock (v1)
  • sui:signTransaction (v2)
  • sui:signAndExecuteTransaction (v2)

Supported Features

Feature KeyVersionPurpose
sui:signTransactionBlock1.0.0Sign a TransactionBlock without executing
sui:signAndExecuteTransactionBlock1.0.0Sign and execute a TransactionBlock
sui:signTransaction2.0.0Sign a Transaction (v2 API) without executing
sui:signAndExecuteTransaction2.0.0Sign and execute a Transaction (v2 API)

Using Sui dApp Kit (@mysten/dapp-kit)

In React apps, the recommended integration is via Sui dApp Kit. The dApp kit handles wallet discovery and provides a unified API for signing and executing transactions.

Example (sign and execute with a TransactionBlock)

import { TransactionBlock } from '@mysten/sui.js/transactions';
import { useSignAndExecuteTransactionBlock } from '@mysten/dapp-kit';
 
const SendSui = () => {
  const { mutateAsync: signAndExecuteTransactionBlock } = useSignAndExecuteTransactionBlock();
 
  const onSend = async () => {
    const tx = new TransactionBlock();
 
    const amount = '100000';
    const recipient = '0x...';
 
    const [coin] = tx.splitCoins(tx.gas, [tx.pure(amount)]);
    tx.transferObjects([coin], tx.pure(recipient));
 
    const result = await signAndExecuteTransactionBlock({
      transactionBlock: tx,
      options: { showInput: true, showEffects: true, showEvents: true },
    });
 
    console.log('digest:', result.digest);
  };
 
  return <button onClick={onSend}>Send</button>;
};

Vanilla JavaScript

If you don’t use @mysten/dapp-kit, you can call the injected provider directly.

All examples below assume the provider is available at:

  • window.cosmostation.sui

sui:signAndExecuteTransactionBlock (v1)

What it does

Signs a TransactionBlock and executes it on-chain in one step.

Example

import { TransactionBlock } from '@mysten/sui.js';
 
// Send SUI coin
const tx = new TransactionBlock();
 
const sampleSendCoinAmount = '100000';
const sampleReceiverAddress = '0x...';
 
const [coin] = tx.splitCoins(tx.gas, [tx.pure(sampleSendCoinAmount)]);
tx.transferObjects([coin], tx.pure(sampleReceiverAddress));
 
const payload = {
  transactionBlock: tx,
  options: {
    showInput: true,
    showEffects: true,
    showEvents: true,
  },
};
 
await window.cosmostation.sui.connect();
 
const response = await window.cosmostation.sui.signAndExecuteTransactionBlock(payload);
 
console.log('digest:', response.digest);

sui:signTransactionBlock (v1)

What it does

Signs a TransactionBlock but does not execute it. Use this when you want to submit the signed transaction yourself (custom RPC submission, batching, relayers, etc).

Example

import { TransactionBlock } from '@mysten/sui.js';
 
const tx = new TransactionBlock();
// ...build tx...
 
await window.cosmostation.sui.connect();
 
// Depending on the provider’s implementation, the wallet may require `account`/`chain`
// or infer them from the current wallet state.
const signed = await window.cosmostation.sui.signTransactionBlock({
  transactionBlock: tx,
});
 
console.log('signed:', signed);

sui:signAndExecuteTransaction (v2)

What it does

Signs and executes a Transaction (v2 API) in one step.

Example

// Transaction (v2) building depends on the Sui TS SDK version you are using.
// The important part: you pass a v2 Transaction payload to `signAndExecuteTransaction`.
 
await window.cosmostation.sui.connect();
 
const response = await window.cosmostation.sui.signAndExecuteTransaction({
  // transaction: <v2 Transaction>,
  // options: { showInput: true, showEffects: true, showEvents: true },
});
 
console.log('digest:', response.digest);

sui:signTransaction (v2)

What it does

Signs a Transaction (v2 API) without executing it.

Example

await window.cosmostation.sui.connect();
 
const signed = await window.cosmostation.sui.signTransaction({
  // transaction: <v2 Transaction>,
});
 
console.log('signed:', signed);