``` tip: 1193 title: TRON Provider JavaScript API author: Aaron.Luo <aaron.luo@tron.network> discussions to: category: status: Draft created: 2022-09-16 ``` ​ ## Table of Contents - [Table of Contents](#table-of-contents) - [Summary](#summary) - [Abstract](#abstract) - [Security Considerations](#security-considerations) - [Handling Adversarial Behavior](#handling-adversarial-behavior) - [Backwards compatibility](#backwards-compatibility) ​ ## Summary 本协议约定一个JavaScript的TRON provider,用于保证支持TRON的wallet与TRON DApp交互的一致性。 ​ ## Abstract TRON DApp生态中一个常见的约定是:密钥管理软件(一般称为wallet)通过网页中的JavaScript对象公开其API。这个对象被称为 “provider”。 该协议将TRON provider的API规范化,并被设计为事件驱动的,且与调用的方法无关。通过定义新的方法和事件类型,可以轻松扩展provider。 本协议建议使用`window.tron`作为provider对象。 从历史上看,部分TRON wallet提供tronWeb对象,本协议推荐provider依然提供tronWeb对象,以避免DApp对本规范的provider需要做额外的兼容开发。 ​ ## Security Considerations provider 旨在在以太坊客户端和以太坊应用程序之间传递消息。它不负责私钥或账户管理;它仅处理 wallet 的消息并发出事件。因此,需要在 provider 与其以太坊客户端之间的中间件中实现账户安全和用户隐私。在实践中,我们将这些中间件应用程序称为“wallet”,它们通常管理用户的私钥和帐户。提供者可以被认为是钱包的扩展,暴露在不受信任的环境中,受某些第三方(例如网站)的控制。 ​ #### Handling Adversarial Behavior 由于provider是一个 JavaScript 对象,消费者一般可以对 provider 进行任意操作,并且它的所有属性都可以被读取或覆盖。 因此,provider应当视为不可控的。provider的实施者需要确保以下内容来保护用户、wallet: - provider不包含任何私人用户数据 - provider和wallet是相互隔离的 - 对provider向wallet发送请求的频率做限制 - wallet需要验证所有从provider发送的数据 ​ ## Backwards compatibility 在本协议确定前,一些wallet实现了非规范的版本。为了兼容历史DApp,wallet可以在实现本协议的前提下,兼容实现非规范版本。