签署
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 | 内部处理异常 |