You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过web3.eth.personal.sign向Metamask发送多行待签名消息

关于web3.eth.personal.sign传递多行消息至MetaMask的问题解答

核心结论

可以直接将包含换行的多行字符串作为web3.eth.personal.sign方法的第一个参数传入,MetaMask签名弹窗会自动识别换行,实现你需要的分段展示效果,和OpenSea的签名弹窗表现完全一致。

具体实现方式

你只需要在构造签名消息时,在需要换行的位置插入转义字符\n即可,如果需要段落之间的空行分隔,插入两个连续的\n(即\n\n)即可。

代码示例

// 构造带分段换行的签名消息
const multiLineMsg = `Welcome to OpenSea!

Click "Sign" to sign in. This action will not trigger any on-chain transaction and will not generate gas fees.

Wallet address: ${userWalletAddress}
Nonce: ${randomNonce}`;

// 发起签名请求
web3.eth.personal.sign(
  multiLineMsg,
  userWalletAddress,
  (error, signatureResult) => {
    if (error) {
      console.error("签名请求失败:", error);
      return;
    }
    // 后续处理签名结果逻辑
  }
);

注意事项

  • 不要对签名消息做额外的HTML转义、URL编码等处理,直接传入原始带\n的字符串即可,否则换行符会被识别为普通字符,无法触发换行
  • 该方案兼容所有主流版本的MetaMask,符合EIP-191规范的personal_sign方法本身就支持任意UTF-8字符串作为签名内容,包括带换行的多段文本
  • 如果你使用的是ethers.js库,对应signMessage方法的实现逻辑完全一致,同样支持传入带\n的多行字符串

内容的提问来源于stack exchange,提问作者Alexandru-Marian Constantin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 05:15:08