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;需要签名时调用 signTransactionsignMessage。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 提供商对象接口定义

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.tronDApp 快速上手
请求用户授权连接provider.request({ method: 'eth_requestAccounts' })DApp 快速上手
发起 TRX 转账(构建 → 签名 → 广播)tronweb.transactionBuilder.sendTrxtronweb.trx.signtronweb.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 } })(支持 trc10trc20trc721 类型)主动交互式 API 列表
切换钱包当前的网络环境provider.request({ method: 'wallet_switchEthereumChain', params: [{ chainId }] })(符合 TIP-3326 规范)主动交互式 API 列表
监听钱包状态与网络切换事件provider.on(event, callback)(支持:accountsChangedchainChangedconnectdisconnect被动通知监听
Ledger 硬件签名交易适配(修正 v 字节)对生成的签名尾字节执行适配转换(如 00 转换为 1b01 转换为 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)。
  • 各类被动事件订阅的触发逻辑(包括 accountsChangedchainChangedconnectdisconnectunlocklock)。
  • 旧接口向现代规范迁移的完整对照与常见避坑指南。

完整技术参考见 TronLink 开发者中心文档


相关资源