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 Key | Version | Purpose |
|---|---|---|
sui:signTransactionBlock | 1.0.0 | Sign a TransactionBlock without executing |
sui:signAndExecuteTransactionBlock | 1.0.0 | Sign and execute a TransactionBlock |
sui:signTransaction | 2.0.0 | Sign a Transaction (v2 API) without executing |
sui:signAndExecuteTransaction | 2.0.0 | Sign 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);