Data Preparation

When signing messages or data, you need to properly encode your data:

Message Signing

For signing messages (personal signatures), encode your data as base64:
JavaScript
const personalSign = async (data: string) => {
  const message = Buffer.from(data, 'utf-8').toString('base64');
  const body = { message_base64: message, chain: 'ETH' };
  return await fetch('/v1/wallet/sign/message', { 
    method: 'POST', 
    body: JSON.stringify(body) 
  });
};

Data Signing

For signing transaction data or other structured data, provide a keccak256 hash:
import { typedSignatureHash } from '@metamask/eth-sig-util';

const signTypedDataV1 = async (data: TypedDataV1) => {
  const rawDataHash = typedSignatureHash(data);
  const body = { raw_data_hash: rawDataHash, chain: 'ETH' };
  return await fetch('/v1/wallet/sign/data', { 
    method: 'POST', 
    body: JSON.stringify(body) 
  });
};