Skip to content

TEP:115 - TON Connect

  • TEP: 115
  • 标题: TON Connect
  • 状态: 活跃
  • 类型: 核心
  • 作者: @oleganza, @siandreev, subden, brainpicture, @sorokin0andrey, abogoslavskiy, @MariaBit, Olga May, Aleksei Mazelyuk, tonrostislav, KuznetsovNikita.
  • 创建日期: 2022年10月20日
  • 取代: -
  • 被取代: -

摘要

TON Connect 是一个用于 TON 钱包和 TON 应用之间通信的统一协议。

动机

开放网络需要一个 统一 的协议,用于 TON 钱包和 TON (d)apps 之间的通信,以实现以下目标:

  1. 任何 TON 应用(web / 桌面 / 移动等)都可以由任何钱包(移动 / 桌面 / web / 浏览器扩展 / dapp 浏览器 / 硬件等)操作。

  2. 用户在所有 TON 应用中获得熟悉且友好的体验。

指南

应用程序提供基于智能合约的 TON 各种功能的用户界面,但不会立即访问用户的资金。因此,它们通常被称为去中心化应用或 “dapps”。

钱包提供批准交易的用户界面,并在用户的个人设备上安全地保存用户的加密密钥。

这种关注点的分离使得用户可以快速创新并获得高水平的安全性:钱包不需要自己构建封闭的生态系统,而应用程序不需要承担持有最终用户账户的风险。

TON Connect 是跨越这一概念差距的桥梁。

除了钱包和应用之间的通信传输层外,TON Connect 还提供授权、向网络发送交易、与智能合约交互等方法。

规范

文档和规范在 https://github.com/ton-blockchain/ton-connect 仓库中。

在创建此 PR 时(2023年2月27日),修订版本为 acc5dd4d2106891cbfcade8d7faa58b9e16937fd

理由和替代方案

统一方式

由于我们努力使区块链尽可能方便和用户友好,任何应用和任何钱包(移动钱包或浏览器扩展或其他)之间的通信必须以统一的方式工作。

这不仅对用户方便,对钱包开发者和 dapp 开发者也方便,他们只需要支持一种协议。

其他区块链(例如,以太坊)未能实现单一网络标准的例子表明,这会让用户感到困惑,并使开发者难以理解不同类型的钱包和连接。

丰富 dapps 的会话

钱包和 dapp 之间最简单的 “一次性” 交互可以通过简单的 ton:// 深链接完成,在这种情况下,通常无法获得请求或运行时事件的响应。

由于更复杂的 dapps 需要丰富的功能,TON Connect 允许在钱包和应用之间建立永久连接,获取响应和事件。

SSE

TON Connect 使用 SSE(服务器发送事件)协议而不是 websockets,因为在实践中 websockets 存在许多连接问题,无法保证解决。

后端

钱包和 dapp 之间的交互在没有后端的情况下只能在 dapp 浏览器或本地打开的 dapp 浏览器扩展中进行。

如果 dapp 和钱包在不同设备上打开(例如用户在桌面上打开应用,在移动设备上打开钱包),则需要一个中介进行通信(中继或桥)。

鉴于关于所有类型钱包的统一协议的前一点,在一般情况下,我们需要 TON Connect 中的后端中介。

TON Connect 使用一个最简单的桥来实现这一点。

通过桥传递的所有消息都经过端到端加密,保护用户隐私。

dapp 浏览器和浏览器扩展可以使用 JS 桥,而无需运行后端服务器,同时协议对所有类型的钱包保持一致。

公共桥

TON Connect 允许运行公共桥,任何钱包和 dapp 都可以使用。

这种选择适合快速实现 TON Connect,但有几个缺点:公共桥可能会获取钱包用户的 IP 地址,一些钱包可能希望桥具有额外功能。

钱包可以运行和托管自己的桥

TON Connect 允许钱包运行自己的桥,如果它们不想使用公共桥。

每个钱包可以维护自己的桥服务器,并自由选择如何与之通信。

dapps 不需要运行桥

在 Ton Connect 中,应用程序不需要维护自己的后端来接收来自钱包的数据。

我们认为,钱包开发者比 dapp 开发者更有可能永久托管服务器:许多 dapps 是简单的无服务器网页。另一个论点是 dapps 的数量远多于钱包。

开源、免费、去中心化

统一的网络标准应为开源和免费。

重要的是,它应去中心化,不依赖于特定的服务器、公司或实现。

例如,任何钱包或 dapp 应该能够使用此技术而无需他人的集中许可。

TON Connect 满足这些考虑。

我们可以举出 WalletConnect 的相反概念的例子,其中所有钱包和应用程序必须通过属于特定组织的单一中继进行通信。运行自己的中继(桥)的可能性在 WalletConnect 中是计划中的。

钱包列表

为了方便开发者,有必要创建一个包含所有钱包及其信息(例如,桥地址)的单一配置。

同样,为了方便用户,UI 可以显示此列表中的钱包,如果用户还没有安装钱包。

这样的列表位于 https://github.com/ton-blockchain/wallets-list 仓库中。

进入此列表的规则应该很简单 - 正确实现 TON Connect 的技术。

我们注意到协议本身并不依赖于此列表。

尽管存在某些中心化和可能的自我监管问题,这样的列表也有助于生态系统的交叉链接和统一。

未来的可能性

预计 TON Connect 的进一步发展将增加涵盖各种功能的新 RPC 方法。