Signing a Message

When a web application has established a connection to the ME wallet, it can prompt users to sign a message. This is commonplace amongst many dApps, as it gives application owners the ability to verify ownership of the wallet. Signing a message does not require any transaction fees.

Sats Connect provides an easy way to request message signing. Let's take a look at the code below.

import { BitcoinNetworkType, signMessage } from 'sats-connect';

// in a real app, you'll use the ME 'payment' address returned after a connection
const nativeSegwitAddress = 'bc1qcdmvsc8qqk8sr2st3mttu6fsmfrjzh5xrf4dch'

async function signWalletMessage() {
  try {
    await signMessage({
      payload: {
        network: {
          type: BitcoinNetworkType.Mainnet,
        },
        address: nativeSegwitAddress,
        message: 'Hello World. Welcome to the Magic Eden wallet!',
      },
      onFinish: (response) => {
        alert(`Successfully signed message: ${response}`);
      },
      onCancel: () => {
        alert('Request canceled');
      },
    });
  } catch (err) {
    console.error(err);
  }
}

A successful prompt to sign a message will look something like this:

Message Format

The ME wallet currently follows the spec design in BIP 322 for message signature types for all addresses. We are looking into adding more explicit support for legacy/ECDSA signing, as we are aware this may be needed for certain circumstances.

Last updated