Signing a Message

Once a web application has connected to the ME Ethereum wallet, it can prompt users to sign messages. Signing is commonplace amongst many dApps, as it gives application owners the ability to verify ownership of the wallet, without requiring any transaction fees.

Direct Signing

Triggering this directly would look make use of the provider request function and look like this:

const message =
	"Hello, World! 🌍 Welcome to the Magic Eden wallet on Ethereum";

// can also use Buffer.from for a simpler implementation, but polyfills :/
const msg =
	"0x" +
	Array.from(message)
		.map((c) => c.charCodeAt(0).toString(16).padStart(2, "0"))
		.join("");
const sign = await provider.request({
	method: "personal_sign",
	params: [msg, address, "Example password"],
});

Using Ethers.js

Alternatively, you can make use of the popular web3 javascript library ethers.js to abstract away some of the above complexity. Instead of directly invoking personal_sign on the provider request, you can wrap the ME browser provider in a Web3Provider object from ethers. Doing so allows you to invoke the signMessage function directly.

 const signer = await provider?.getSigner();
 await signer!.signMessage(
   "Hello, World! 🌍 Welcome to the Magic Eden wallet on Ethereum"
 );

Last updated