Skip to main content
The Phantom Connect Browser SDK provides chain-specific message signing methods through dedicated interfaces (sdk.solana and sdk.ethereum).

Chain-specific message signing

Solana message signing

// Sign a message with Solana wallet
const signature = await sdk.solana.signMessage("Hello Solana!");
// Returns: { signature: string, rawSignature: string }

Ethereum message signing

// Sign personal message
const signature = await sdk.ethereum.signPersonalMessage("Hello Ethereum!", address);

// Sign EIP-712 typed data
const typedDataSignature = await sdk.ethereum.signTypedData(typedData, address);

Complete examples

Solana message signing

import { BrowserSDK, AddressType } from "@phantom/browser-sdk";

const sdk = new BrowserSDK({
  providerType: "injected",
  addressTypes: [AddressType.solana],
});

await sdk.connect();

// Sign a message
const signature = await sdk.solana.signMessage("Hello Solana!");
console.log("Signature:", signature.signature);
console.log("Raw signature:", signature.rawSignature);

Ethereum message signing

import { BrowserSDK, AddressType } from "@phantom/browser-sdk";

const sdk = new BrowserSDK({
  providerType: "injected",
  addressTypes: [AddressType.ethereum],
});

await sdk.connect();
const accounts = await sdk.ethereum.getAccounts();

// Sign personal message
const message = "Hello Ethereum!";
const signature = await sdk.ethereum.signPersonalMessage(message, accounts[0]);
console.log("Signature:", signature.signature);

EIP-712 typed data signing

const typedData = {
  types: {
    EIP712Domain: [
      { name: "name", type: "string" },
      { name: "version", type: "string" },
      { name: "chainId", type: "uint256" },
      { name: "verifyingContract", type: "address" }
    ],
    Mail: [
      { name: "from", type: "string" },
      { name: "to", type: "string" },
      { name: "contents", type: "string" }
    ]
  },
  primaryType: "Mail",
  domain: {
    name: "Ether Mail",
    version: "1",
    chainId: 1,
    verifyingContract: "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC"
  },
  message: {
    from: "Alice",
    to: "Bob",
    contents: "Hello!"
  }
};

const accounts = await sdk.ethereum.getAccounts();
const signature = await sdk.ethereum.signTypedData(typedData, accounts[0]);
console.log("Typed data signature:", signature.signature);