首頁 web前端 js教程 TMA 錢包 — 適用於 Telegram Mini 應用程式的非託管 MPC 錢包

TMA 錢包 — 適用於 Telegram Mini 應用程式的非託管 MPC 錢包

Jan 15, 2025 am 07:25 AM

TMA Wallet — a non-custodial MPC wallet for your Telegram Mini App

JavaScript·加密貨幣·密碼學

概述

大家好!我想你已經知道,大約一年來,Telegram 中的迷你應用程式出現了熱潮每個人都點擊了倉鼠。這些迷你應用程式大多數都與加密貨幣有關。許多開發者希望在應用程式內為用戶提供一個錢包(EVM、TON、Solana 等)——基本上是一個可以充值、可以提取資金、最重要的是可以調用智慧合約的虛擬帳戶。

一個簡單但不安全的解決方案是將所有金鑰儲存在您的伺服器上並代表使用者進行交易。如果有人入侵您的伺服器,所有客戶資金都會遺失。在這種情況下很難贏得人們的信任。

一個複雜但不方便的解決方案是用戶必須將其寫在一張紙上並自行管理的錢包。在這種情況下,您可能只使用 WalletConnect 或根本不建立迷你應用程式。問題是你的迷你應用程式的 UI 可能會變得很痛苦:使用者必須確認外部應用程式中的每個操作。

我們為我們的迷你應用程式尋找一個選項,該選項可以提供非託管錢包的安全性和盡可能流暢的用戶體驗/用戶介面。我們找到了它。

在本文中,我將回顧TMA 錢包(npm 套件、網站、GitHub)——一個適用於任何鏈的開源、非託管、多方錢包,它使用最近推出了 Telegram Cloud Storage API。

我們走吧!


非常簡短的術語解釋

  • 錢包=私鑰。該私鑰用於簽署交易並授予其所有者控制特定區塊鏈地址資金的權利。

  • 託管錢包 = 某些組織擁有您的私鑰並且可以代表您行事。一個典型的例子是像幣安這樣的加密貨幣交易所。這很方便,但需要對組織有極大的信任。

  • 非主機錢包 = 您獨自擁有您的私鑰。它儲存在您的設備上,所有使用您的資金的操作均由您完成或經過您的確認。主要問題是很容易丟失。如果您丟失私鑰,您就會丟失資金。

  • MPC(多方計算) = 解決「錢包遺失」問題的嘗試:金鑰被分成幾部分,儲存在不同的地方,所有部分都需要在交易上形成簽名。在這種情況下,駭客攻擊一方不會讓您存取用戶的資金。同時,用戶不需要完全自行儲存密鑰。

因此,非託管 MPC 錢包 是一種私鑰被分成多個部分存儲在不同位置且永遠不會由任何一方完全組裝的錢包。


TMA 錢包到底是什麼?

TMA 錢包 是一種非託管多方 (MPC) 錢包,它使用 Telegram Cloud Storage 進行安全金鑰儲存。一切都連結到用戶的 Telegram 帳戶,因此他們不必記住任何助記詞或設定外部錢包。流程非常流暢,您的用戶甚至可能沒有意識到幕後有一個加密錢包 - 您可以建立一個完全友好的 UI 並向用戶隱藏區塊鏈魔力。

以下是一些主要優點:

  1. 輕鬆整合:只需安裝 npm 包,將其插入您的程式碼即可。現在,您的迷你應用程式的每個用戶都有一個錢包。

  2. 無 TON Connect 或 WalletConnect 解決方法:使用者完全留在 Telegram 中;所有交易均在「幕後」簽署。

  3. MPC 技術:任何人都無法使用私鑰 — Telegram 不行,您的伺服器不行,TMA Wallet 的伺服器不行。它僅在用戶設備上組合幾納秒(在簽署交易時),然後消失。

  4. 輕鬆恢復:遺失手機?沒問題——換一個新錢包,登入 Telegram,錢包就會自動恢復。

  5. 從多個設備訪問:如果用戶使用相同的 Telegram 帳戶從桌面客戶端打開迷你應用程序,他們將可以訪問與手機上相同的錢包。

  6. 開源:一切都在 GitHub 上。您可以自行審查和驗證安全性或委託審核。

  7. Viem/Wagmi/Ethers.js 支援:如果您正在開發任何 EVM 相容鏈(以太坊、BSC、Polygon 等),則可以使用標準函式庫。

  8. 支援任何鏈:EVM 鏈開箱即用,但 TMA 錢包基本上是一個用於單獨存儲任何秘密的系統。因此,您可以儲存 TON、Solana 或任何其他鏈的私鑰。


它是如何「在幕後」運作的?

正如我所提到的,TMA 錢包基於 MPC 原則,其中私鑰在多方之間有效共享,並且僅在客戶端短暫重組以簽署交易。這是一個簡短的摘要:

  1. 當使用者首次開啟您的小型應用程式時,使用者的裝置會產生 ClientPublicKeyClientSecretKeyClientSecretKey 儲存在 Telegram Cloud Storage 中。

  2. ClientPublicKey 和 WebApp.initData(由 Telegram 簽署)傳送到伺服器。

  3. 伺服器檢查 Telegram 的簽章是否有效,並(選用)要求使用者進行額外驗證 (2FA)。這是可選的,如果您不想,則不必這樣做。

  4. 伺服器然後透過使用自己的 ServerSecretKey 簽章(ClientPublicKey telegramUserId)來產生 IntermediaryKey。然後它會加密此 IntermediaryKey,然後再將其發送回客戶端。

  5. IntermediaryKey 返回客戶端並在那裡解密。

  6. 最後,客戶端用ClientSecretKey簽署IntermediaryKey,得到WalletPrivateKey(錢包的實際私鑰)。

此金鑰用於簽署交易,並且不會長期保存在任何地方。對於每個新操作,都會重複該步驟鏈(步驟 1 除外)。

最終,該應用程式的用戶體驗看起來很完美:由於迷你應用程式中的自動身份驗證,登入是無縫的,並且由於有應用程式內錢包,因此交易是無縫的。


如何將其添加到您的小程式中?

  1. 安裝 SDK
   npm install --save @tmawallet/sdk
登入後複製
  1. 初始化程式碼中的金鑰
   import { TMAWalletClient } from '@tmawallet/sdk';
   import { ethers } from 'ethers';

   // Don't forget to sign up at dash.tmawallet.com
   const myApiKey = '1234567812345678'; // Your API key
   const client = new TMAWalletClient(myApiKey);

   // Authorize the user and create/load their wallet
   await client.authenticate();

   console.log('Your wallet address: ', client.walletAddress);
登入後複製
  1. 進行交易的範例(此處使用 Ethers.js):
   // Use TMA Wallet as the "signer" for ethers
   const provider = new ethers.JsonRpcProvider();
   const signer = client.getEthersSigner(provider);

   const tx = await signer.sendTransaction({
     to: '0x...',
     value: ethers.parseEther('1.0'),
   });
   console.log('Transaction hash:', tx.hash);
登入後複製

就是這樣。


常問問題

以下是 TMA 錢包自述文件中的問題(略有編輯)及其答案:

這絕對安全嗎?

是的,這就是核心思想。由於 MPC 協議,TMA 錢包的伺服器、Telegram 和您都無法完全存取私鑰,只有用戶可以。

我必須授予您存取我的機器人令牌的權限嗎?

不會。我們是最早支援 Telegram 新的非對稱簽章方案的公司之一。我們只需要您的機器人 ID,該 ID 已經公開。

可以支援哪些區塊鏈?

任何。 EVM 區塊鏈(以太坊等)可以與 ethers.js 一起開箱即用。對於自訂的內容,您可以使用 accessPrivateKey 方法。

如果使用者遺失設備怎麼辦?

只要他們能夠訪問自己的 Telegram 帳戶,他們只需在新設備上登錄,錢包就會自動恢復。不需要助記詞。

我可以備份金鑰嗎?

從技術上講是可以的,但你可能不需要。錢包已經可以透過 Telegram 恢復。如果您願意,您可以讓用戶備份,但這需要您自擔風險。


結論

我們在我們自己的兩個應用程式中使用了TMA 錢包。一個已經在製作中(我有點害羞地在開始時發布鏈接,但我認為可以在頁腳中提及:Only100x)。

對於任何建立 Telegram 迷你應用程式並希望為用戶提供安全錢包而又不會因外部連接器而擾亂用戶體驗的人來說,這是一個不錯的選擇。

請隨意嘗試並探索文件。該專案的所有程式碼均在 GitHub 上開放。祝你好運!


標籤:

telegram 迷你應用程式 · 加密貨幣 · 非主機錢包 · tma 錢包

以上是TMA 錢包 — 適用於 Telegram Mini 應用程式的非託管 MPC 錢包的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1658
14
CakePHP 教程
1415
52
Laravel 教程
1309
25
PHP教程
1257
29
C# 教程
1231
24
神秘的JavaScript:它的作用以及為什麼重要 神秘的JavaScript:它的作用以及為什麼重要 Apr 09, 2025 am 12:07 AM

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

JavaScript的演變:當前的趨勢和未來前景 JavaScript的演變:當前的趨勢和未來前景 Apr 10, 2025 am 09:33 AM

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript引擎:比較實施 JavaScript引擎:比較實施 Apr 13, 2025 am 12:05 AM

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript:探索網絡語言的多功能性 JavaScript:探索網絡語言的多功能性 Apr 11, 2025 am 12:01 AM

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

Python vs. JavaScript:學習曲線和易用性 Python vs. JavaScript:學習曲線和易用性 Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

如何使用Next.js(前端集成)構建多租戶SaaS應用程序 如何使用Next.js(前端集成)構建多租戶SaaS應用程序 Apr 11, 2025 am 08:22 AM

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

從C/C到JavaScript:所有工作方式 從C/C到JavaScript:所有工作方式 Apr 14, 2025 am 12:05 AM

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

使用Next.js(後端集成)構建多租戶SaaS應用程序 使用Next.js(後端集成)構建多租戶SaaS應用程序 Apr 11, 2025 am 08:23 AM

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

See all articles