Skip to Content
dApp 接入
本页目录

personal_sign

使用指定账户签署消息。签名前会添加 "\x19Ethereum Signed Message:\n" 前缀,以区分消息签名与原始交易签名。


参数

索引类型说明
0string要签名的消息(十六进制编码)
1string签名账户地址

返回值

string - 签名(65 字节十六进制字符串)


示例

const message = 'Hello, OneKey!' const hexMessage = '0x' + Array.from(new TextEncoder().encode(message), byte => byte.toString(16).padStart(2, '0')).join('') const signature = await window.$onekey.ethereum.request({ method: 'personal_sign', params: [hexMessage, accounts[0]] }) console.log('Signature:', signature)

使用 ethers.js

import { hashMessage, recoverAddress } from 'ethers' const message = 'Hello, OneKey!' const hexMessage = '0x' + Array.from(new TextEncoder().encode(message), byte => byte.toString(16).padStart(2, '0')).join('') const signature = await window.$onekey.ethereum.request({ method: 'personal_sign', params: [hexMessage, accounts[0]] }) // Verify signature const recoveredAddress = recoverAddress(hashMessage(message), signature) console.log('Verified:', recoveredAddress.toLowerCase() === accounts[0].toLowerCase())

错误码

错误码消息说明
4001User rejected the request用户拒绝签名请求
-32602Invalid params消息或地址无效

说明

  • 消息必须是带 0x 前缀的十六进制编码
  • 实际签名的消息格式为:"\x19Ethereum Signed Message:\n" + len(message) + message
  • 签名结构化数据请使用 eth_signTypedData_v4
  • 遵循 EIP-191  规范

用于身份验证时,请检查目标域名、账户、过期时间和服务器签发的一次性挑战。对固定示例消息生成有效签名,不等于完成了安全的登录流程。

最后更新于