Skip to Content
dApps
En esta página

personal_sign

Firma un mensaje con la cuenta especificada. Al mensaje se le añade el prefijo "\x19Ethereum Signed Message:\n" antes de firmar para distinguir las firmas de mensajes de la firma de transacciones en bruto.


Parámetros

ÍndiceTipoDescripción
0stringMensaje que se va a firmar (codificado en hexadecimal)
1stringDirección con la que firmar

Devuelve

string - La firma (cadena hexadecimal de 65 bytes)


Ejemplo

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)

Uso de 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())

Errores

CódigoMensajeDescripción
4001El usuario rechazó la solicitudEl usuario denegó la solicitud de firma
-32602Parámetros no válidosMensaje o dirección no válidos

Notas

  • El mensaje debe estar codificado en hexadecimal con 0x como prefijo
  • El mensaje que se firma realmente es: "\x19Ethereum Signed Message:\n" + len(message) + message
  • Para firmar datos tipados, usa eth_signTypedData_v4 en su lugar
  • Definido por EIP-191 

Para autenticación, verifica el dominio previsto, la cuenta, la caducidad y el desafío de un solo uso del servidor. Una firma válida de un mensaje fijo de ejemplo no constituye un flujo de inicio de sesión completo.

Última actualización el