本页目录
personal_sign
使用指定账户签署消息。签名前会添加 "\x19Ethereum Signed Message:\n" 前缀,以区分消息签名与原始交易签名。
参数
| 索引 | 类型 | 说明 |
|---|---|---|
| 0 | string | 要签名的消息(十六进制编码) |
| 1 | string | 签名账户地址 |
返回值
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())错误码
| 错误码 | 消息 | 说明 |
|---|---|---|
| 4001 | User rejected the request | 用户拒绝签名请求 |
| -32602 | Invalid params | 消息或地址无效 |
说明
- 消息必须是带
0x前缀的十六进制编码 - 实际签名的消息格式为:
"\x19Ethereum Signed Message:\n" + len(message) + message - 签名结构化数据请使用 eth_signTypedData_v4
- 遵循 EIP-191 规范
用于身份验证时,请检查目标域名、账户、过期时间和服务器签发的一次性挑战。对固定示例消息生成有效签名,不等于完成了安全的登录流程。
最后更新于