With Crossmint’s SDK, you can enable no-friction signing experiences for your users. This includes:

  1. Message signatures from as well as
  2. Gas-less signatures for arbitrary transactions, leveraging Crossmint’s paymaster service

You have full flexibility to customize the UI for signing, to make the make the blockchain as invisible as you’d like.

Sign + verify messages

This function allows your users to sign an arbitrary message. Please make sure you have an instantiated Crossmint smart wallet.

const signMessage = async () => {
    const message = "<message>";
    const signature = await wallet.signMessage(message);
};

You can then verify that the message was signed by the wallet. You can do this without an instance of the Crossmint smart wallet.

import { verifyMessage } from "@crossmint/client-sdk-aa"

const checkMessage = async () => {
    const isVerified = await verifyMessage({
        message: message,
        address: wallet.getAddress(),
        signature,
        chain: wallet.chain,
    });
}

## Send transactions

Crossmint provides a function to sign and send transactions, allowing your user to interact
with smart contracts in your app. This function allows for arbitrary transaction execution. It's also gas-less by default, sponsored by Crossmint's paymaster

```jsx
const sendTransaction = async () => {

    // Construct transaction
    const transaction = {
        to: "<recepient_wallet>", // Recipient address
        gasLimit: 21000, // Gas limit for the transaction (optional)
        gasPrice: parseUnits("20", "gwei"), // Gas price for the transaction (optional)
        data: "0x", // Arbitrary data, such as input parameters for smart contract functions or additional transaction details. (Optional)
    };

    // Send the transaction
    const txnResult = await wallet.sendTransaction(transaction);
    console.log(txnResult);
};