跳到主要内容

签署

Cardano 数据签名常用于登录认证、地址所有权证明和链下授权。UKey Wallet 通过 CIP-8 返回 COSE 格式签名和公钥。


签名数据(CIP-8)

下面这段参考代码把消息转为十六进制 payload 后请求用户签名:

const api = await window.cardano.ukey.enable();

const addresses = await api.getUsedAddresses();
const address = addresses[0];

// 下面是待签消息
const payload = Buffer.from("Cardano demo message").toString("hex");

const signature = await api.signData(address, payload);

console.log({
signature: signature.signature, // COSE_Sign1 格式签名
key: signature.key, // COSE_Key 公钥数据
});

验签

import { COSESign1, COSEKey } from "@emurgo/cardano-message-signing-browser";

const coseSign1 = COSESign1.from_bytes(Buffer.from(signature.signature, "hex"));
const coseKey = COSEKey.from_bytes(Buffer.from(signature.key, "hex"));

// 读取签名后的 payload
const signedPayload = coseSign1.payload();

// 校验签名
const publicKey = coseKey.header(0); // 读取 Ed25519 密钥
// 校验逻辑...

处理异常

try {
const api = await window.cardano.ukey.enable();
} catch (error) {
if (error.code === -1) {
console.log("用户拒绝了本次连接");
} else if (error.code === -2) {
console.log("没有返回可用账户");
} else {
console.error("执行报错:", error.message);
}
}

常见异常

错误码说明
-1用户取消了操作
-2未匹配到账户
-3网络参数不正确