跳到主要内容

签署消息

连接 UKey Wallet 后,应用可以请求用户签署一段消息。消息签名不会产生链上费用,常用于登录认证、证明地址所有权或确认链下操作。

发起签名前,应用需要准备清晰、可读、不会被复用的消息内容:

  1. hexUTF-8 字符串编码为 Uint8Array
  2. 调用 UKey Wallet Provider 请求用户确认并签名。
  3. 在服务端或应用端校验签名对应的公钥。

使用 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,
});