将 TON 区块链集成到 Trust Wallet:案例研究

发布: (2026年1月16日 GMT+8 04:56)
7 min read
原文: Dev.to

Source: Dev.to

请提供您希望翻译的具体文本内容,我将为您翻译成简体中文并保留原有的格式、Markdown 语法以及技术术语。谢谢!

旅程

  • 第1个月: TON 在一个拥有 1.3亿 用户的钱包中上线。

  • 资助: 我看到 TON 基金会提供开发资助,提交申请后,他们几乎立刻联系了我。

  • 合作: 我给在 Trust Wallet 工作的朋友发了信息。我们一起创建了一个群聊,成员包括:

    1. Wallet Core 开发者
    2. TON 团队
    3. 我的工程师朋友
  • 复杂情况: Trust Wallet 由两部分组成:

    1. Wallet Core – 开源库,负责密钥生成、地址校验、交易签名等。
    2. App layer – 闭源代码,用于获取余额、广播交易以及与 UI 交互。

    只有 Trust Wallet 内部团队可以修改 App 层,这意味着 管理层批准、分配的工程时间以及责任追究

  • 基金会的担忧: “如果 Trust Wallet 从未将其加入应用会怎样?为何要资助这个项目?”

  • 解决方案: 双方团队达成了折中方案。

    • TON 批准了资助。
    • Trust Wallet 承诺优先进行集成。

    结果: 为 Trust Wallet 用户提供了新的区块链,为 TON 用户提供了新的钱包——双赢。

  • 开发: 我的朋友完成了大部分编码工作;我负责审查和完善。该 PR 大约在一个月内合并。

Trust Wallet 平台

平台描述
Android原生应用
iOS原生应用
Browser Extension基于网页的钱包

其核心是 Wallet Core,一个开源的 C++/Rust 库,支持 130+ 条区块链。它不仅被 Trust Wallet 使用,也被其他主流钱包(例如 Crypto.com)使用。该库处理:

  • 私钥生成
  • 地址创建与验证
  • 交易签名
  • 智能合约交互

这就是我们添加 TON 的地方。

TON 背景

  • 原始项目: 由 Pavel Durov 发起;开发部分由 TON Labs 负责。
  • 制裁: 在美国制裁后,Durov 退出,但 TON Labs 继续开发了一个名为 Free TON 的分叉,后更名为 Everscale
  • 当前状态: 一个新的 TON Foundation(得到 Durov 认可)复活了该项目,将其集成到 Telegram 中,项目已起飞。

TON Labs 做出了大量令人印象深刻的技术工作。Everscale 已经在 Wallet Core 中出现;我们将共享代码提取到一个名为 CommonTON 的模块中,该模块现在为 Everscale 和 TON 提供动力。

钱包模型差异

钱包类型实现
EverscaleV3 钱包(旧)已在 Wallet Core 中
TONV4R2 钱包(新)为此集成实现

在 TON 中,钱包 不仅仅是一个地址——它是一个完整的智能合约。要创建交易,需要向钱包合约发送 外部消息,钱包合约随后会转发 内部消息 给接收方。

External Message (user → wallet contract)
├─ header: sender’s contract address
├─ stateInit: code & data (only on first transaction)
└─ body
   ├─ signature: Ed25519 signature
   └─ signing_message
      ├─ wallet_id, expire_at, seqno
      └─ Internal Message (to recipient)
         ├─ header: "send Y nanotons to address Z"
         └─ body: transfer comment

技术细节

单元结构(Bag‑of‑Cells)

所有 TON 数据都是由 单元(最大 1023 比特 + 最多 4 个引用)构成的树。下面是我们为创建 V4R2 钱包数据单元添加的代码(C++ 风格,编译进 Wallet Core)。

// Create the data cell for a V4R2 wallet
Cell::Ref WalletV4R2::createDataCell() const {
    CellBuilder builder;

    builder.appendU32(0);                         // sequence_number
    builder.appendU32(walletId);                  // wallet_id
    builder.appendRaw(publicKey.bytes, 256);       // public key (256 bits)
    builder.appendBitZero();                      // "no plugins" flag

    // Total: 321 bits → fits into a single cell
    return builder.intoCell();
}

要构建一笔交易,我们会为以下内容组装单元:

  • 接收方地址
  • 金额
  • 可选备注

所有单元都会被打包进已经在 Wallet Core 中实现的 BOC(Bag‑of‑Cells)序列化器。

地址格式

原始地址示例用户友好格式
Everscale0:4f6bbb5de550f01a5b73792ceca77d8c933ab396a1e300eb0ab5a5f49a430986
TONEQBPa7td5VDwGltzeSzsp32MkzqzlqHjAOsKtaX0mkMJhq_B

TON 格式是一个 Base64 字符串,内部嵌入了地址类型信息和 校验和,用于捕捉输入错误。

助记词 & 密钥派生

  • BIP‑39 定义:

    seed = hash(mnemonic + salt)

  • 标准盐: "mnemonic" + password

  • TON 盐: "TON default seed"

由于盐不同,相同的助记词在 Tonkeeper 与 Trust Wallet 中会生成不同的私钥。因此,这些钱包 不可互换。同样的问题也出现在 Waves、Qtum 和 Polkadot(sr25519)中。

TON 地址中的校验和还能在助记词出现拼写错误导致地址无效时,立即提醒用户。

超出代码的贡献

  • 为 Trust Wallet 团队提供了 代码示例,包括:
    • 获取交易数据
    • 查询钱包状态
  • 对与 TON 相关的 应用集成 问题提供咨询。
  • 向资产库添加了区块链元数据和 TON 标志。

Outcomes

指标数值
通过 Trust Wallet 获得 TON 访问的用户130 million
区块链集成补助金$4,250
添加 Jettons(TON 代币)补助金$4,000
PR 合并到 Wallet CoreJanuary 2023

在最初的集成之后,我随后添加了 Jetton 支持(TON 代币),并转向了其他 TON 和 NEAR 项目。

我偶尔会在 Twitter 上分享开发笔记及其他内容。

致谢

衷心感谢所有贡献者:

  • Tao Xu
  • Roman Sztergbaum
  • optout
  • Sergei(Trust Wallet 团队)– 组织与代码审查
  • Kirill(TON 基金会)– 协助管理所有事务
  • Narek – 来自 TON 的技术支持
  • Vyacheslav – 实现了主要集成
  • Vladimir(Trust Wallet)– 使其成为可能并进行代码审查
  • 以及所有其他为本项目做出贡献的人
Back to Blog

相关文章

阅读更多 »

云安全策略失效的地方

云安全策略的问题 如果政策没有被遵守,即使再好的政策也是毫无价值的。 当我查看我们的检测平台时,我看到许多资源……

阅读障碍会传染吗?

封面图片:Is Dyslexia Contagious? https://media2.dev.to/dynamic/image/width=1000,height=1000,fit=scale-down,gravity=auto,format=auto/https%3A%2F%2Fdev-to-...