跳到主要内容

签署

Sui 消息签名适合登录认证、地址所有权证明和链下授权。签名前请确保消息包含 nonce、应用来源和必要上下文,避免签名被重复使用。


签名个人消息

建议优先使用 signPersonalMessage 发起个人消息签名:

const message = new TextEncoder().encode("Sui sample payload");
const [account] = await provider.getAccounts();
const chain = await provider.getActiveChain();

const callResult = await provider.signPersonalMessage({
message,
account,
chain,
});

console.log({
signature: callResult.signature, // Base64 形式的签名
bytes: callResult.bytes, // 签名后的消息字节
});

签名消息(旧版)

const message = new TextEncoder().encode("Sui sample payload");
const [account] = await provider.getAccounts();
const chain = await provider.getActiveChain();

const callResult = await provider.signMessage({
message,
account,
chain,
});

console.log({
signature: callResult.signature,
messageBytes: callResult.messageBytes,
});

验签

import { verifyPersonalMessage } from "@mysten/sui.js/verify";

const message = new TextEncoder().encode("Sui sample payload");
const [account] = await provider.getAccounts();
const chain = await provider.getActiveChain();
const { signature } = await provider.signPersonalMessage({
message,
account,
chain,
});

const accounts = await provider.getAccounts();
const publicKey = accounts[0].publicKey;

const isValid = await verifyPersonalMessage(message, signature);
console.log("签名校验结果:", isValid);

处理异常

try {
await provider.requestPermissions();
} catch (error) {
if (error.code === 4001) {
console.log("用户拒绝了这次连接请求");
} else {
console.error("连接过程中出错:", error.message);
}
}

常见错误码

错误码说明
4001用户取消了本次请求
4100尚未完成授权
-32603内部处理异常