路线 7:硬件钱包签名集成
在应用中接入已有硬件钱包,并在 Shasta 完成账户读取、TRX 交易签名、验签、广播与确认。
本路线可以作为在 TRON 应用中接入硬件钱包签名能力的起点,适合负责在钱包、托管工具或其他应用中,通过现有硬件钱包签署 TRON 交易的开发者。
可以从这条路线了解什么
硬件钱包接入通常由主机应用和设备共同完成。主机应用构建交易、调用接入组件、验证返回的签名、广播交易并查询结果;硬件钱包保存私钥,并按照设备支持的方式向用户展示和确认签名请求。
路线以一笔 Shasta TRX 转账为贯穿实践:从设备读取 TRON 账户,在主机应用中构建未签名交易,调用真实设备完成签名,再验证签名并跟踪交易直至固化。完成这条流程后,可以继续按照设备已经支持的交易类型接入 TRC-20 转账或其他操作。
本路线不介绍硬件设计、固件开发、APDU、安全芯片或厂商应用上架。设备连接方式、签名接口、确认页面和支持的交易类型,以所选硬件钱包的厂商文档和 SDK 为准。
路线概览
| 阶段 | 主要内容 | 贯穿实践中的结果 |
|---|---|---|
| 1. 选择设备接口并建立连接 | 确认设备支持 TRON,并通过厂商 SDK 或通信库建立连接 | 能够从应用调用设备的 TRON 账户与签名接口 |
| 2. 核对设备账户 | 核对派生路径、公钥和 TRON 地址 | 一组不含秘密材料的账户测试记录 |
| 3. 构建并签署 TRX 转账 | 构建交易、在设备上确认并取得签名 | 一笔由真实设备签署并通过本地验签的交易 |
| 4. 广播并确认交易 | 区分广播接收、打包、执行与固化 | 通过原 txID 保存的 Shasta 交易结果 |
| 5. 扩展与回归测试 | 按设备能力增加交易类型并验证异常路径 | 已支持交易类型和拒绝场景的测试记录 |
开始前
完成实践需要一台明确支持 TRON 的硬件钱包、对应的厂商 SDK 或设备通信库、一个仅用于 Shasta 的测试账户,以及能够构建和广播 TRON 交易的主机程序。请先根据厂商文档确认设备、固件、TRON 应用和接入组件的版本能够配合使用。
测试账户不应持有真实资产。主机应用只读取设备公开的地址或公钥,并向设备提交签名请求;助记词和私钥不应离开硬件钱包,也不应出现在日志、配置或测试数据中。
如果暂时没有真实设备,可以使用配套 Recipe 中的模拟适配器检查主机侧的数据流,但这不能验证设备连接、密钥隔离、设备显示或物理确认。完成本路线的贯穿实践仍需要使用真实硬件钱包签署测试交易。
路线阶段
1. 选择设备接口并建立连接
不同硬件钱包提供的连接方式和签名接口并不相同。开始实现前,需要先确认目标设备是否支持 TRON、能够签署哪些交易类型,以及应用应通过哪一个厂商 SDK 或设备通信库访问设备。
主机应用应把设备通信封装在独立适配器中。适配器至少需要支持按账户路径读取地址或公钥,以及提交交易签名请求。请求参数、返回签名格式、用户确认流程和错误码均应以厂商接口为准,不能假定所有硬件钱包接收相同的 raw_data_hex 或返回相同格式的签名。
推荐阅读
-
所选硬件钱包的官方开发者文档
用于确认 TRON 支持范围、设备连接方式、SDK 版本、签名参数和返回值。这些内容具有厂商特性,TRON 协议文档不能替代。
-
用于了解联网主机构建交易、硬件钱包签名和联网端广播之间的数据流;具体设备调用仍以厂商接口为准。
-
用于准备 Shasta Endpoint 和测试账户。不同 TRON 网络使用相同地址前缀,应用不能仅根据地址判断网络。
阶段实践
选择一款支持 TRON 的硬件钱包,记录设备、固件、TRON 应用、接入组件和主机运行环境的版本。按照厂商示例连接设备,并从应用调用一次只读的账户接口。
此时应能稳定识别设备连接、断开、用户取消和应用未打开等状态。不要在错误日志中记录签名载荷之外的敏感设备信息。
开始核对账户前:应用能够通过厂商支持的接口连接设备并读取 TRON 地址或公钥,且不要求设备导出助记词或私钥。
2. 核对设备账户
主机应用需要明确由哪个设备账户签名。TRON 账户使用 secp256k1,硬件钱包通常按照 BIP-44 coin type 195 派生账户。具体派生路径和账户选择方式仍以设备实现为准。
同一账户可以表示为以 41 开头的 Hex 地址或以 T 开头的 Base58Check 地址。应用需要统一接入组件、TRON SDK 和节点 API 使用的地址格式,并确认转换前后仍为同一个账户。
推荐阅读
-
用于了解 TRON 的 BIP-44 coin type、secp256k1 和常见派生路径。
-
用于核对公钥、Hex 地址和 Base58Check 地址之间的关系。
-
用公开测试向量交叉核对地址计算。Recipe 中的软件派生只用于验证主机实现,不能代替从真实设备读取账户。
阶段实践
从设备读取一个仅用于测试的 TRON 账户,保存派生路径、公开地址和公钥等非秘密信息。使用 TRON SDK 核对 Hex 与 Base58Check 地址转换,并确认后续交易的 owner_address 使用这个账户。
再切换一次设备账户或账户索引,确认应用会更新签名者,而不是继续复用上一个地址。
构建交易前:设备、接入组件和主机应用指向同一个 TRON 账户,测试记录不包含助记词、私钥或其他可恢复秘密材料。
3. 构建并签署 TRX 转账
从字段较少的 TRX 转账开始,可以先验证主机交易构建、设备确认和签名返回是否能够形成闭环。主机使用选定的设备地址作为 owner_address,在 Shasta 构建一笔小额、未签名的 TransferContract。
应用随后按照所用接入组件的要求提交签名请求。用户应在硬件钱包上核对设备能够展示的信息并确认签名;设备具体展示哪些字段、是否完整解析交易,由所用设备和 TRON 应用决定。主机不能用自己生成的确认文字代替设备确认。
取得签名后,主机应基于原交易重新计算 txID,规范化接入组件返回的签名格式,并恢复签名地址。恢复地址必须与设备账户及交易 owner_address 一致,签名前后的交易数据也必须保持不变。
推荐阅读
-
用于了解构建交易时写入的引用区块、时间戳、过期时间和合约数据。
-
用于区分结构化
raw_data、Protobuf 序列化字节和raw_data_hex,并确认txID的计算对象。 -
用于在广播前检查签名格式并恢复签名账户。
-
用于验证主机侧的交易构建、适配器调用、验签和可选广播流程。示例默认使用模拟适配器;实际接入时必须替换为所选硬件钱包支持的厂商 SDK 或设备通信库。
阶段实践
在 Shasta 构建一笔小额 TRX 转账,通过真实硬件钱包完成用户确认和签名。保存设备与接入组件版本、原 txID、非敏感的设备确认记录和主机验签结果。
分别测试用户拒绝签名、设备断开和签名者不匹配,确认这些情况不会进入广播阶段。
广播交易前:签名由真实设备产生,恢复地址与设备账户和
owner_address一致,且设备确认之后原交易没有被修改。
4. 广播并确认交易
签名成功不代表交易已经被网络接受或执行。主机需要把设备返回的签名写入原交易并广播,然后始终使用签名前已经确定的 txID 查询结果。
广播接口返回 result: true 只表示当前节点接受交易。应用还需要确认交易是否被打包、执行是否成功,以及包含该交易的区块是否已经固化。
广播超时或返回重复交易错误时,不应立即构建另一笔转账。应先查询原 txID,必要时在交易仍有效时重播同一笔已签名交易;只有确认原交易未上链且已经过期后,才重新构建并请求设备再次确认和签名。
推荐阅读
-
用于广播已签名交易并查询交易本体、执行收据和已固化结果。
-
用于区分节点接收、交易打包、执行结果和固化状态。
-
用于处理重复交易、过期、签名错误和广播结果未知。
阶段实践
广播上一阶段由设备签署的原交易,依次保存广播响应、交易记录、执行结果和已固化结果。核对各阶段使用同一个 txID,并模拟一次广播结果未知,确认应用会继续查询原交易而不是自动创建另一笔付款。
扩展交易类型前:应用能够验证设备签名、广播同一笔交易,并根据执行和固化结果更新状态。
5. 扩展与回归测试
完成 TRX 转账闭环后,可以根据设备和接入组件已经支持的范围增加 TRC-20 转账、账户权限或其他交易类型。每增加一种类型,都需要确认主机如何构建交易、设备能够展示和确认哪些内容、接入组件返回何种签名,以及应用如何验证链上结果。
对于 TRC-20 transfer(address,uint256),主机至少应核对目标合约、函数 selector、接收地址、最小单位金额、Token 精度和 fee_limit。如果设备无法清晰展示合约调用内容,应按照厂商提供的行为向用户说明,而不能把主机界面的说明当作设备已完成可信确认。
回归测试应覆盖账户不匹配、交易被修改、交易过期、用户拒签、设备断开、不支持的交易类型、无效签名和广播结果未知。交易内容或过期时间发生变化后,必须重新请求设备确认和签名。
推荐阅读
-
用于了解 TRC-20 转账所在的合约调用结构。
-
用于核对
transfer(address,uint256)的接收地址和金额参数。 -
用于理解合约调用中的费用上限;设备展示和策略仍以厂商实现为准。
-
用于为签名拒绝、交易过期和广播结果未知分别制定处理方式。
阶段实践
先把真实设备签署 TRX 转账的成功流程和异常场景整理为可重复执行的测试。设备明确支持 TRC-20 转账时,再构建一笔 Shasta 测试调用,核对设备显示、返回签名和主机解析结果;如果设备不支持,则记录支持范围,不通过模拟代码声称已经完成硬件接入。
完成本路线的贯穿实践:应用能够从真实设备读取 TRON 账户,通过厂商支持的接口请求并取得一笔 TRX 转账签名,在主机侧完成验签、广播和固化确认,并正确处理用户拒签、设备断开和交易结果未知。
后续实践与扩展
完成这条路线后,应得到设备与接入组件版本记录、不包含秘密材料的账户测试记录、一笔由真实硬件钱包签署并在 Shasta 固化的 TRX 交易,以及相应的异常场景测试结果。
继续接入更多交易类型时,应以设备实际支持范围为准,并分别补充交易字段核对、设备确认、签名验证和链上结果检查。涉及固件、安全芯片、设备端解析或厂商应用发布时,需要转入相应硬件钱包厂商的开发与安全流程。
Updated about 7 hours ago
