签署
Algorand 消息签名适合登录验证、地址所有权证明和链下授权。签名前建议加入应用名称、nonce 和过期时间。
签名任意消息
const message = new TextEncoder().encode("Algorand sample message");
const { signature, address } = await provider.signMessage(
message,
"utf8", // 也可以传 'base64'
);
console.log("生成的签名:", signature);
console.log("恢复出的签名者:", address);
验签
import nacl from "tweetnacl";
const message = new TextEncoder().encode("Algorand sample message");
const { signature } = await provider.signMessage(message);
// 根据地址读取公钥
const publicKey = algosdk.decodeAddress(provider.address).publicKey;
const isValid = nacl.sign.detached.verify(message, signature, publicKey);
console.log("校验结果:", isValid);
处理异常
try {
const signedTxns = await provider.signTxns(walletTxns);
} catch (error) {
if (error.code === 4001) {
console.log("用户已拒绝本次请求");
} else if (error.code === 4100) {
console.log("钱包当前处于锁定状态");
} else {
console.error("执行报错:", error.message);
}
}
常见错误码
| 错误码 | 说明 |
|---|---|
| 4001 | 用户取消了本次请求 |
| 4100 | 尚未完成授权 |
| 4200 | 当前方法不可用 |
| 4300 | 输入内容不合法 |