En esta página
Firmar un mensaje
Cuando una aplicación web está conectada a OneKey, también puede pedir al usuario que firme un mensaje concreto. Las aplicaciones pueden definir sus propios mensajes, que se mostrarán al usuario en la solicitud de firma de OneKey. Las firmas de mensajes no implican comisiones de red y son una forma práctica de verificar la propiedad de una dirección.
Para enviar un mensaje al usuario para su firma, una aplicación web debe:
- Proporcionar los bytes del mensaje como
Uint8Array; usaTextEncoderpara texto UTF-8. - Solicitar que la cartera OneKey del usuario firme el mensaje codificado.
signMessage
const provider = getProvider();
if (!provider) throw new Error('OneKey Solana provider is unavailable.');
const message = `To avoid digital dognappers, sign below to authenticate with CryptoCorgis`;
const encodedMessage = new TextEncoder().encode(message);
const signedMessage = await provider.signMessage(encodedMessage, "utf8");request
const provider = getProvider();
if (!provider) throw new Error('OneKey Solana provider is unavailable.');
const message = `To avoid digital dognappers, sign below to authenticate with CryptoCorgis`;
const encodedMessage = new TextEncoder().encode(message);
const signedMessage = await provider.request({
method: "signMessage",
params: {
message: bs58.encode(encodedMessage),
display: "utf8",
},
});El ejemplo con request requiere import bs58 from "bs58". Ambas formas se resuelven en un objeto con un Uint8Array signature y un PublicKey publicKey. La opción de visualización controla la presentación; no cambia los bytes que se firman. Para la autenticación, verifica la firma con el mensaje exacto y usa un desafío de un solo uso.
Firma de mensajes fuera de la cadena
El código actual del proveedor admite la versión 1 y requiere la lista de firmantes previstos. Usa la función auxiliar para codificar la solicitud y devolver los bytes exactos firmados. Puede que las carteras antiguas no admitan este método; gestiona las solicitudes rechazadas.
const provider = getProvider();
if (!provider) throw new Error('OneKey Solana provider is unavailable.');
const { publicKey } = await provider.connect();
const result = await provider.solSignOffchainMessage(
'Sign in to example.com. Nonce: <SERVER_GENERATED_NONCE>',
[publicKey],
);
// Verify result.signature against result.signedOffchainMessage and result.publicKey.No reutilices el formato antiguo de solicitud de la versión 0. Comprueba la disponibilidad del método y la estructura de la respuesta en la versión de cartera compatible con tu aplicación.