DApp 钱包集成
说明 TRON DApp 如何连接用户钱包、获取账户授权,并构造、签名和广播交易。
TRON DApp 通常通过用户授权的非托管钱包与链交互。典型流程是:DApp 构造交易,钱包弹窗请求用户确认,钱包完成签名,并在多数场景下广播交易。DApp 还需要响应账户切换、网络切换、连接和断开等钱包事件。
本文聚焦 DApp 侧的钱包接入逻辑。若要开发钱包本身,请读钱包开发者指南。
前置阅读
DApp 钱包集成核心工作
- 在页面中自动检测用户浏览器内已安装的钱包扩展程序
- 发起连接请求,获取用户授权以读取其钱包账户地址
- 构造链上交易体,并调起钱包请求用户执行签名
- 向 TRON 网络广播已签名的交易数据
- 实时监听钱包端的关键事件(包括账户切换、网络切换、登录与断开连接)
- 引导用户将自定义 Token 添加到钱包资产列表中
- 申请切换用户当前连接的钱包网络(主网/Shasta/Nile)
集成方案选型对比
TRON DApp 对接钱包主要有两条路线。两者不互斥,很多 DApp 会同时提供这两个入口。
| 方案 | 支持的钱包 | 最适合的业务场景 |
|---|---|---|
| TronWallet Adapter | 支持 TronLink、Bitget 钱包、OKX 钱包、经 TronLink 桥接的 Ledger 硬件钱包以及 Adapter 项目已支持的钱包 | 推荐用于统一集成。Adapter 封装稳定接口;后续有新钱包加入时,DApp 通常无需改底层代码。 |
| 直接对接 TronLink | 仅支持 TronLink 钱包 | 逻辑更简单,便于学习调试。适合只服务 TronLink 用户,或需要调用 TronLink 特有 API 的 DApp。 |
TronWallet Adapter 用一层稳定接口抽象钱包差异,适合生产环境 DApp。集成文档见 TronWallet Adapter 指南。
直接对接 TronLink 更轻量,中间没有额外封装,适合学习、调试和深度定制。两条路线的底层概念一致:全局对象注入、请求响应和事件监听。
方案一:使用 TronWallet Adapter 集成
TronWallet Adapter 是面向 TRON DApp 的多钱包连接抽象层。DApp 只面向一组统一 API 开发,Adapter 负责处理各钱包之间的交互差异。
典型流程:安装 Adapter npm 包,在前端挂载连接弹窗 UI;需要签名时调用 signTransaction 或 signMessage。Adapter 引导用户选择钱包,按对应协议完成签名,再把已签名交易返回给 DApp。
安装步骤、支持的钱包列表、主流前端框架(React、Vue、原生 JS)的组件引入方式,以及完整的签名 API 参考,见 TronWallet Adapter 章节。
方案二:直接集成 TronLink 扩展钱包
TronLink 是常用的 TRON 浏览器扩展非托管钱包,定位类似以太坊生态中的 MetaMask。用户安装扩展后,TronLink 会向页面注入 window.tron Provider。DApp 通过该对象请求用户授权,经 provider.tronWeb 读取当前地址、构造并签名交易,也可以监听钱包状态变化。
TronLink 在 docs.tronlink.org 维护独立的开发者文档。以下小节概述当前的 API 注入结构,并附对应的文档参考链接。
API 现代化规范(2025 年起推荐)TronLink 已完成 DApp API 的现代化重构:钱包注入对象统一为
window.tron;账户授权推荐使用eth_requestAccounts;钱包检测与发现支持 TIP-6963;事件监听统一使用provider.on(event, callback)。旧 API 仍向后兼容,新项目建议直接使用现代接口。
window.tron 提供商对象接口定义
window.tron 提供商对象接口定义TronLink 向每个页面注入的 Provider 接口结构如下:
interface TronProvider {
isTronLink: true;
request: (args: { method: string; params?: any }) => Promise<any>;
tronWeb: TronWeb | false;
on(event: string, listener: (...args: any[]) => void): this;
removeListener(event: string, listener: (...args: any[]) => void): this;
}request(...)— 专供 DApp 主动发起调用的 JSON-RPC 规范入口(例如调用eth_requestAccounts请求授权、wallet_watchAsset申请添加 Token 资产、wallet_switchEthereumChain请求切换网络)。tronWeb— 用户授权该 DApp 域名前,值为false;授权成功后转为可用的 TronWeb 实例,可在前端构建并签名链上交易。on(...)/removeListener(...)— 订阅或取消订阅钱包端的被动事件(例如账户切换accountsChanged、网络切换chainChanged、建立连接connect以及断开连接disconnect)。
核心接口映射表
| 功能 | API 调用方式 | 参考文档入口 |
|---|---|---|
| 检测页面中的 TronLink 钱包 | 基于 TIP-6963(通过监听 TIP6963:announceProvider 事件检测,若不支持则降级读取 window.tron) | DApp 快速上手 |
| 请求用户授权连接 | provider.request({ method: 'eth_requestAccounts' }) | DApp 快速上手 |
| 发起 TRX 转账(构建 → 签名 → 广播) | tronweb.transactionBuilder.sendTrx → tronweb.trx.sign → tronweb.trx.sendRawTransaction | 转账交易开发指南 |
| 多重签名交易处理 | sendTrx(to, amount, { permissionId }) → tronweb.trx.multiSign(tx, undefined, permissionId) | 多重签名交易开发指南 |
| 对任意消息/数据签名 | tronweb.trx.signMessageV2(hexString) | 消息签名与校验 |
| Stake 2.0 资源代理/回收 | delegateResource(...)(可在 __options 中附加带宽与能量参数注解) | Stake 2.0 集成说明 |
| 将自定义 Token 导入钱包资产列表 | provider.request({ method: 'wallet_watchAsset', params: { type, options } })(支持 trc10、trc20 或 trc721 类型) | 主动交互式 API 列表 |
| 切换钱包当前的网络环境 | provider.request({ method: 'wallet_switchEthereumChain', params: [{ chainId }] })(符合 TIP-3326 规范) | 主动交互式 API 列表 |
| 监听钱包状态与网络切换事件 | provider.on(event, callback)(支持:accountsChanged、chainChanged、connect、disconnect) | 被动通知监听 |
Ledger 硬件签名交易适配(修正 v 字节) | 对生成的签名尾字节执行适配转换(如 00 转换为 1b,01 转换为 1c)以满足 TRON 标准签名格式要求 | Ledger 硬件钱包集成适配 |
链 ID 对照表(以太坊十六进制规范)
查询网络环境或发起网络切换请求时,TronLink 用以太坊规范的十六进制 Chain ID 标识网络:
| 网络环境 | 十六进制 链 ID |
|---|---|
| 主网 (Mainnet) | 0x2b6653dc |
| Shasta 测试网 | 0x94a9059e |
| Nile 测试网 | 0xcd8690dc |
后续阅读
本章明确 TronWallet Adapter 与直接集成的架构差异,并给出注入提供商(Provider)的对象定义和链 ID 映射。以下细节另见 TronLink 文档:
- 完整的
request(...)API 错误码定义与业务语义。 - 完备的快速上手代码示例(包含 TIP-6963 的检测流程、
eth_requestAccounts的接入写法,以及交易构建、签名与广播的完整 Demo)。 - 各类被动事件订阅的触发逻辑(包括
accountsChanged、chainChanged、connect、disconnect、unlock、lock)。 - 旧接口向现代规范迁移的完整对照与常见避坑指南。
完整技术参考见 TronLink 开发者中心文档。
相关资源
- TronWallet Adapter 指南 —— 面向多钱包接入的标准库
- TronWeb 文档 —— JavaScript SDK 参考
- TronLink 开发者中心 —— TronLink 钱包交互规范与错误码
- 交易底册 —— TRON 交易模型与签名流程
- 智能合约接入 —— DApp 如何与智能合约交互
Updated 26 days ago