签署消息
连接 UKey Wallet 后,应用可以请求用户签署一段消息。消息签名不会产生链上费用,常用于登录认证、证明地址所有权或确认链下操作。
发起签名前,应用需要准备清晰、可读、不会被复用的消息内容:
- 将 hex 或 UTF-8 字符串编码为
Uint8Array。 - 调用 UKey Wallet Provider 请求用户确认并签名。
- 在服务端或应用端校验签名对应的公钥。
使用 signMessage 方法
const provider = getProvider();
const message = `为防止数字资产被盗,请在下方签名以通过 CryptoCorgis 进行身份验证`;
const encodedMessage = new TextEncoder().encode(message);
const signedMessage = await provider.signMessage(encodedMessage, "utf8");
用 request
const provider = getProvider();
const message = `为防止数字资产被盗,请在下方签名以通过 CryptoCorgis 进行身份验证`;
const encodedMessage = new TextEncoder().encode(message);
const signedMessage = await provider.request({
method: "signMessage",
requestParams: {
message: encodedMessage,
display: "hex",
},
});
签署链下消息
该方法用于签署带版本的链下消息,适合身份验证或链下证明场景:
使用 solSignOffchainMessage 方法
const provider = getProvider();
const message = "签署此消息以验证您的身份";
const signedMessage = await provider.request({
method: "solSignOffchainMessage",
requestParams: {
message: message,
version: 0, // 可选传入的版本号
},
});
console.log({
signature: signedMessage.signature,
publicKey: signedMessage.publicKey,
});