Sur cette page
Signature d’un message
Lorsqu’une application web est connectée à OneKey, elle peut aussi demander à l’utilisateur de signer un message donné. Les applications peuvent rédiger leurs propres messages, qui s’affichent dans la demande de signature de OneKey. Les signatures de messages n’entraînent pas de frais réseau et permettent aux applications de vérifier facilement la propriété d’une adresse.
Pour soumettre un message à la signature de l’utilisateur, une application web doit :
- Fournir les octets du message sous forme de
Uint8Array; utilisezTextEncoderpour le texte UTF-8. - Demander la signature du message encodé via le portefeuille OneKey de l’utilisateur.
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",
},
});L’exemple request nécessite import bs58 from "bs58". Les deux formes se résolvent en un objet contenant une signature de type Uint8Array et une publicKey de type PublicKey. L’option d’affichage contrôle la présentation ; elle ne modifie pas les octets signés. Pour l’authentification, vérifiez la signature par rapport au message exact et utilisez un défi à usage unique.
Signature de message hors chaîne
Le code actuel du fournisseur prend en charge la version 1 et exige la liste des signataires prévus. Utilisez l’utilitaire pour encoder la requête et renvoyer les octets exacts signés. Les anciens portefeuilles peuvent ne pas prendre en charge cette méthode ; gérez les requêtes rejetées.
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.Ne réutilisez pas l’ancien format de requête version 0. Vérifiez la disponibilité de la méthode et la structure de la réponse dans la version de portefeuille prise en charge par votre application.