跳到主要内容

快上手

这里演示如何检测 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();