跳到主要内容

签署

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输入内容不合法