@mysten/sui v2.0 and a new dApp Kit are here! Check out the migration guide
Mysten Labs SDKs
Actions

Sign Personal Message

The signPersonalMessage action prompts the connected wallet to sign a personal message. This is useful for authentication, proof of ownership, or other scenarios where you need cryptographic proof that a user controls a specific account.

Usage

import { createDAppKit } from '@mysten/dapp-kit-core';

const dAppKit = createDAppKit({
	/* config */
});

const message = new TextEncoder().encode('Please sign this message');
const result = await dAppKit.signPersonalMessage({
	message,
});

console.log('Message bytes:', result.bytes);
console.log('Signature:', result.signature);

Parameters

  • message - Uint8Array - The message to sign as a byte array

Return Value

Returns a Promise that resolves to an object containing:

  • bytes - string - Base64 encoded message bytes
  • signature - string - Base64 encoded signature

Message Format

The message parameter must be a Uint8Array. Common patterns for creating byte arrays:

const textMessage = new TextEncoder().encode('Hello, Sui!');
await dAppKit.signPersonalMessage({ message: textMessage });

const jsonMessage = new TextEncoder().encode(
	JSON.stringify({ action: 'sign', timestamp: Date.now() }),
);
await dAppKit.signPersonalMessage({ message: jsonMessage });

Security Considerations

Message Content

  • Always display the message content clearly to users before signing
  • Avoid signing opaque or encoded data that users cannot understand
  • Include human-readable prefixes for different message types
  • Consider adding timestamps to prevent replay attacks

On this page