---
# System prepended metadata

title: Untitled

---

```
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可以在实现本协议的前提下，兼容实现非规范版本。