Signing and Executing Transactions
useSignAndExecuteTransaction
The main hook for executing transactions:Copy
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
Copy
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
Copy
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
Build Escrow dApp
Build a complete escrow dApp