快上手
这里演示如何检测 UKey Wallet TRON Provider、请求账户授权,并通过 TronWeb 读取余额、发送 TRX 或调用 TRC20 合约。
ℹ️
UKey Wallet TRON Provider 兼容 TronLink 接口,并提供 TronWeb 和 SunWeb 相关实例。
找 Provider
// UKey Wallet 会同时挂出 provider 和 TronWeb 实例
const provider = window.$ukey?.tron;
// 连接完成后 TronWeb 会挂到全局
const tronWeb = window.tronWeb;
if (!provider) {
throw new Error("未检测到 UKey Wallet TRON provider");
}
// 确认是否兼容 TronLink
console.log("isTronLink:", provider.isTronLink); // 布尔参考片段:true
请求授权
// 请求建立连接
const callResult = await provider.request({
method: "tron_requestAccounts",
});
if (callResult.code === 200) {
console.log("连接流程已完成!");
const address = tronWeb.defaultAddress.base58;
console.log("解析出的地址:", address);
} else {
console.log("连接请求被拒绝:", callResult.message);
}
检查连接状态
// 确认 TronWeb 是否已就绪
if (tronWeb && tronWeb.ready) {
console.log("连接结果:", tronWeb.defaultAddress.base58);
} else {
console.log("当前尚未建立连接");
}
使用 TronWeb
连接成功后,可以使用全局 tronWeb 实例访问 TRON 网络:
获取余额
const balance = await tronWeb.trx.getBalance(tronWeb.defaultAddress.base58);
console.log("当前余额:", tronWeb.fromSun(balance), "TRX");
发送 TRX
const tx = await tronWeb.trx.sendTransaction(
"TR7x6W5v4U3t2S1r0Q9p8NmLyKjHgFeDcB",
tronWeb.toSun(10), // ten TRX
);
console.log("构造出的交易:", tx.txid);
发送 TRC20 代币
const contractAddress = "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t";
const contract = await tronWeb.contract().at(contractAddress);
// 读取精度
const decimals = await contract.decimals().call();
// 发起代币转账
const amount = 100 * 10 ** decimals; // 100 枚代币
const tx = await contract.transfer("TR7x6W5v4U3t2S1r0Q9p8NmLyKjHgFeDcB", amount).send();
console.log("构造出的交易:", tx);
事件流
看账户变化
provider.on("accountsChanged", (accounts) => {
if (accounts[0]) {
console.log("当前账户已切换为:", accounts[0]);
} else {
console.log("连接已关闭");
}
});
监听网络变更
provider.on("chainChanged", (chainId) => {
console.log("网络已切换为:", chainId);
// 网络切换后通常建议刷新页面
});
Window 事件(TronLink 兼容)
// 监听 TronLink 初始化事件
window.addEventListener("tronLink#initialized", () => {
console.log("TronLink 初始化已完成");
});
// 监听消息事件
window.addEventListener("message", (event) => {
if (event.data.isTronLink) {
const { action, data } = event.data.message;
console.log("TronLink 回调事件:", action, data);
}
});
从 TronLink 接入迁移
UKey Wallet 与 TronLink 接口兼容。迁移时建议优先读取 UKey Wallet,未安装时再回退到 TronLink:
// 旧写法(仅 TronLink)
const legacyTronWeb = window.tronWeb;
// 调整后(UKey Wallet 优先,TronLink 作为备选)
const provider = window.$ukey?.tron || window.tronLink;
const activeTronWeb = window.tronWeb; // UKey Wallet 和 TronLink 都会挂出这个对象