快上手
这里演示如何检测 UKey Wallet Cardano Provider、启用钱包、读取余额、地址和 UTxO,并监听账户变化。
ℹ️
UKey Wallet 实现 CIP-30 Cardano dApp Connector,并提供 Nami 兼容入口,便于现有 Cardano DApp 接入。
找 Provider
// UKey Wallet 会同时提供 ukey 和 nami 两套接口
const ukey = window.cardano?.ukey;
const nami = window.cardano?.nami;
// 确认是否可用
if (!ukey) {
throw new Error("未检测到 UKey Wallet Cardano provider");
}
// 读取钱包信息
console.log("钱包名称:", ukey.name); // 'UKey Wallet'
console.log("API 版本号:", ukey.apiVersion); // '0.1.0'
console.log("图标地址:", ukey.icon);
请求启用钱包
// 向钱包请求访问权限
const api = await window.cardano.ukey.enable();
// 此时即可调用完整 API
const networkId = await api.getNetworkId();
console.log("当前网络:", networkId === 1 ? "主网" : "测试网");
检查是否已启用
const isEnabled = await window.cardano.ukey.isEnabled();
if (isEnabled) {
const api = await window.cardano.ukey.enable();
// 继续使用 API...
}
获取网络 ID
const api = await window.cardano.ukey.enable();
const networkId = await api.getNetworkId();
// 0 表示测试网,1 表示主网
console.log("当前网络:", networkId);
获取余额
const balance = await api.getBalance();
// 返回值为 CBOR 编码内容(十六进制字符串)
console.log("CBOR 余额:", balance);
// 借助 cardano-serialization-lib 解码
import { Value } from "@emurgo/cardano-serialization-lib-browser";
const value = Value.from_bytes(Buffer.from(balance, "hex"));
const lovelace = value.coin().to_str();
console.log("当前余额:", parseInt(lovelace) // 1000000, "ADA");
读取地址
// 读取已使用地址(已有交易历史)
const usedAddresses = await api.getUsedAddresses();
console.log("已有使用记录的地址:", usedAddresses);
// 读取未使用地址(新地址)
const unusedAddresses = await api.getUnusedAddresses();
console.log("尚未使用的地址:", unusedAddresses);
// 读取找零地址
const changeAddress = await api.getChangeAddress();
console.log("找零用途地址:", changeAddress);
// 读取奖励/质押地址
const rewardAddresses = await api.getRewardAddresses();
console.log("奖励/质押地址:", rewardAddresses);
读取 UTxO
// 读取所有 UTxO
const utxos = await api.getUtxos();
console.log("读取到的 UTxOs:", utxos);
// 读取具有最小金额的 UTxO
const utxosWithAmount = await api.getUtxos(
"1000000", // 最低参考值为 1 ADA(单位 lovelace,CBOR 编码)
);
// 这里演示分页读取
const paginatedUtxos = await api.getUtxos(undefined, {
page: 0,
limit: 10,
});
事件流
const api = await window.cardano.ukey.enable();
// 兼容 Nami 的事件 API
api.experimental.on("accountChange", (addresses) => {
console.log("当前账户已切换为:", addresses);
});
Nami 兼容性
如需兼容已有 Nami 接入,也可以通过 window.cardano.nami 使用同一套能力:
// 通过 Nami 接口调用
const nami = window.cardano.nami;
const api = await nami.enable();
// 与 UKey Wallet 保持一致的 API
const balance = await api.getBalance();