Skip to Content
dApps
En esta página

Firma de datos

Usa personal_sign para un mensaje legible por personas o eth_signTypedData_v4 para datos estructurados descritos por EIP-712 . Solicita firmas después de conectar una cuenta y explica qué está autorizando el usuario antes de abrir el aviso de la cartera.

Mensajes personales

personal_sign recibe primero el mensaje codificado en hexadecimal y después la dirección del firmante. El valor devuelto es una cadena de firma. Una solicitud de firma no envía una transacción ni paga una comisión de red.

const provider = window.$onekey?.ethereum; if (!provider) throw new Error('OneKey Ethereum provider is unavailable.'); const [address] = await provider.request({ method: 'eth_requestAccounts' }); const message = 'Sign in to example.com. Nonce: <SERVER_GENERATED_NONCE>'; const bytes = new TextEncoder().encode(message); const data = '0x' + Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join(''); try { const signature = await provider.request({ method: 'personal_sign', params: [data, address], }); // Verify the signature and one-time challenge on your server. console.log(signature); } catch (error) { console.error(error.code, error.message); }

Para iniciar sesión, sustituye el valor de ejemplo por un desafío de un solo uso generado en el servidor y valida el dominio previsto, la caducidad y el firmante. Nunca consideres que la mera existencia de una firma autentica al usuario sin verificarla.

Datos tipados v4

Llama a eth_signTypedData_v4 con [address, JSON.stringify(typedData)]. El objeto typedData contiene types, primaryType, domain, y message. Cada campo del mensaje debe coincidir con su tipo declarado.

Campo del dominioFinalidad
nameNombre legible de la aplicación o del protocolo
versionVersión del dominio de firma
chainIdCadena a la que se destina la firma
verifyingContractDirección del contrato que verifica la firma; es una dirección, no una URL
saltSeparador de dominio opcional cuando lo requiere el protocolo

La separación de dominios ayuda a distinguir los contextos de firma. Aun así, la aplicación o el contrato verificador debe validar el dominio y aplicar su propia protección contra ataques de repetición; EIP-712 no ofrece esa protección por sí solo.

// `typedData` must be built from your protocol's complete EIP-712 schema. const signature = await provider.request({ method: 'eth_signTypedData_v4', params: [address, JSON.stringify(typedData)], });

Métodos de firma heredados

Las integraciones existentes pueden usar eth_signTypedData o eth_signTypedData_v3. Sus codificaciones difieren de v4; cambiar el método RPC requiere también cambiar y probar el verificador. Los nombres de los métodos RPC incluyen el eth_ como prefijo.

Evita eth_sign para iniciar sesión en aplicaciones. Firma datos opacos y puede dificultar la verificación de la intención del usuario. La compatibilidad de métodos puede variar según el tipo de cuenta, el modelo de hardware, el firmware y la versión de la cartera; gestiona los errores de método no compatible en lugar de asumir que todas las cuentas conectadas pueden firmar cualquier formato.

Ejemplo

Abrir ejemplo 

Última actualización el