> ## Documentation Index
> Fetch the complete documentation index at: https://web3docs.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Sign Transactions

> Build, sign, and execute transactions on the Sui blockchain

# Signing and Executing Transactions

## useSignAndExecuteTransaction

The main hook for executing transactions:

```typescript theme={null}
import { useSignAndExecuteTransaction } from "@mysten/dapp-kit";
import { Transaction } from "@mysten/sui/transactions";

function TransferSUI() {
  const { mutate: signAndExecute } = useSignAndExecuteTransaction();

  const handleTransfer = () => {
    const tx = new Transaction();

    // Split 1 SUI from gas coin
    const [coin] = tx.splitCoins(tx.gas, [1_000_000_000]); // 1 SUI = 1B MIST

    // Transfer to recipient
    tx.transferObjects([coin], "0xRecipientAddress...");

    signAndExecute(
      { transaction: tx },
      {
        onSuccess: (result) => console.log("Success!", result.digest),
        onError: (error) => console.error("Failed:", error),
      }
    );
  };

  return <button onClick={handleTransfer}>Transfer 1 SUI</button>;
}
```

## Transfer Objects

```typescript theme={null}
function TransferObject({ objectId, recipient }: { objectId: string; recipient: string }) {
  const { mutate: signAndExecute } = useSignAndExecuteTransaction();

  const handleTransfer = () => {
    const tx = new Transaction();
    tx.transferObjects([tx.object(objectId)], recipient);
    signAndExecute({ transaction: tx });
  };

  return <button onClick={handleTransfer}>Transfer Object</button>;
}
```

## Call Move Functions

```typescript theme={null}
function MintNFT({ name, description, imageUrl }: { name: string; description: string; imageUrl: string }) {
  const { mutate: signAndExecute, isPending } = useSignAndExecuteTransaction();

  const handleMint = () => {
    const tx = new Transaction();

    tx.moveCall({
      target: "0xYourPackage::nft::mint",
      arguments: [
        tx.pure.string(name),
        tx.pure.string(description),
        tx.pure.string(imageUrl),
      ],
    });

    signAndExecute(
      { transaction: tx },
      {
        onSuccess: ({ digest }) => alert("NFT minted! TX: " + digest),
        onError: (error) => alert("Failed: " + error.message),
      }
    );
  };

  return (
    <button onClick={handleMint} disabled={isPending}>
      {isPending ? "Minting..." : "Mint NFT"}
    </button>
  );
}
```

## Next Steps

<Card title="Build Escrow dApp" icon="arrow-right" href="/sui/frontend/workshop-1/06-build-escrow-dapp" horizontal>
  Build a complete escrow dApp
</Card>
