In this example, we are going to sign a message for Bitcoin.

import { useDynamicContext } from '@dynamic-labs/sdk-react-core';
import { isBitcoinWallet } from '@dynamic-labs/bitcoin';

const SignMessageButton = () => {
  const { primaryWallet } = useDynamicContext();

  const signMessage = async () => {
    if (!primaryWallet || !isBitcoinWallet(primaryWallet)) return;

    const signature = await primaryWallet.signMessage('example');

    console.log('signature', signature);
  };

  return <button onClick={signMessage}>Sign message</button>;
};

You can also sign a message with a specific address type (payment or ordinal) using the signMessageWithAddress method.

import { useDynamicContext } from '@dynamic-labs/sdk-react-core';
import { isBitcoinWallet } from '@dynamic-labs/bitcoin';

const SignMessageButton = () => {
  const { primaryWallet } = useDynamicContext();

  const signMessageWithOrdinalsAddress = async () => {
    if (!primaryWallet || !isBitcoinWallet(primaryWallet)) return;

    const signature = await primaryWallet.signMessageWithAddress('example', 'ordinals');

    console.log('signature', signature);
  };

  const signMessageWithPaymentAddress = async () => {
    if (!primaryWallet || !isBitcoinWallet(primaryWallet)) return;

    const signature = await primaryWallet.signMessageWithAddress('example', 'payment');

    console.log('signature', signature);
  };

  return <>
    <button onClick={signMessageWithOrdinalsAddress}>Sign message with ordinals address</button>
    <button onClick={signMessageWithPaymentAddress}>Sign message with payment address</button>
  </>;
};