JavaScript·加密貨幣·密碼學
概述
大家好!我想你已經知道,大約一年來,Telegram 中的迷你應用程式出現了熱潮每個人都點擊了倉鼠。這些迷你應用程式大多數都與加密貨幣有關。許多開發者希望在應用程式內為用戶提供一個錢包(EVM、TON、Solana 等)——基本上是一個可以充值、可以提取資金、最重要的是可以調用智慧合約的虛擬帳戶。
一個簡單但不安全的解決方案是將所有金鑰儲存在您的伺服器上並代表使用者進行交易。如果有人入侵您的伺服器,所有客戶資金都會遺失。在這種情況下很難贏得人們的信任。
一個複雜但不方便的解決方案是用戶必須將其寫在一張紙上並自行管理的錢包。在這種情況下,您可能只使用 WalletConnect 或根本不建立迷你應用程式。問題是你的迷你應用程式的 UI 可能會變得很痛苦:使用者必須確認外部應用程式中的每個操作。
我們為我們的迷你應用程式尋找一個選項,該選項可以提供非託管錢包的安全性和盡可能流暢的用戶體驗/用戶介面。我們找到了它。
在本文中,我將回顧TMA 錢包(npm 套件、網站、GitHub)——一個適用於任何鏈的開源、非託管、多方錢包,它使用最近推出了 Telegram Cloud Storage API。
我們走吧!
非常簡短的術語解釋
錢包=私鑰。該私鑰用於簽署交易並授予其所有者控制特定區塊鏈地址資金的權利。
託管錢包 = 某些組織擁有您的私鑰並且可以代表您行事。一個典型的例子是像幣安這樣的加密貨幣交易所。這很方便,但需要對組織有極大的信任。
非主機錢包 = 您獨自擁有您的私鑰。它儲存在您的設備上,所有使用您的資金的操作均由您完成或經過您的確認。主要問題是很容易丟失。如果您丟失私鑰,您就會丟失資金。
MPC(多方計算) = 解決「錢包遺失」問題的嘗試:金鑰被分成幾部分,儲存在不同的地方,所有部分都需要在交易上形成簽名。在這種情況下,駭客攻擊一方不會讓您存取用戶的資金。同時,用戶不需要完全自行儲存密鑰。
因此,非託管 MPC 錢包 是一種私鑰被分成多個部分存儲在不同位置且永遠不會由任何一方完全組裝的錢包。
TMA 錢包到底是什麼?
TMA 錢包 是一種非託管多方 (MPC) 錢包,它使用 Telegram Cloud Storage 進行安全金鑰儲存。一切都連結到用戶的 Telegram 帳戶,因此他們不必記住任何助記詞或設定外部錢包。流程非常流暢,您的用戶甚至可能沒有意識到幕後有一個加密錢包 - 您可以建立一個完全友好的 UI 並向用戶隱藏區塊鏈魔力。
以下是一些主要優點:
輕鬆整合:只需安裝 npm 包,將其插入您的程式碼即可。現在,您的迷你應用程式的每個用戶都有一個錢包。
無 TON Connect 或 WalletConnect 解決方法:使用者完全留在 Telegram 中;所有交易均在「幕後」簽署。
MPC 技術:任何人都無法使用私鑰 — Telegram 不行,您的伺服器不行,TMA Wallet 的伺服器不行。它僅在用戶設備上組合幾納秒(在簽署交易時),然後消失。
輕鬆恢復:遺失手機?沒問題——換一個新錢包,登入 Telegram,錢包就會自動恢復。
從多個設備訪問:如果用戶使用相同的 Telegram 帳戶從桌面客戶端打開迷你應用程序,他們將可以訪問與手機上相同的錢包。
開源:一切都在 GitHub 上。您可以自行審查和驗證安全性或委託審核。
Viem/Wagmi/Ethers.js 支援:如果您正在開發任何 EVM 相容鏈(以太坊、BSC、Polygon 等),則可以使用標準函式庫。
支援任何鏈:EVM 鏈開箱即用,但 TMA 錢包基本上是一個用於單獨存儲任何秘密的系統。因此,您可以儲存 TON、Solana 或任何其他鏈的私鑰。
它是如何「在幕後」運作的?
正如我所提到的,TMA 錢包基於 MPC 原則,其中私鑰在多方之間有效共享,並且僅在客戶端短暫重組以簽署交易。這是一個簡短的摘要:
當使用者首次開啟您的小型應用程式時,使用者的裝置會產生 ClientPublicKey 和 ClientSecretKey。 ClientSecretKey 儲存在 Telegram Cloud Storage 中。
ClientPublicKey 和 WebApp.initData(由 Telegram 簽署)傳送到伺服器。
伺服器檢查 Telegram 的簽章是否有效,並(選用)要求使用者進行額外驗證 (2FA)。這是可選的,如果您不想,則不必這樣做。
伺服器然後透過使用自己的 ServerSecretKey 簽章(ClientPublicKey telegramUserId)來產生 IntermediaryKey。然後它會加密此 IntermediaryKey,然後再將其發送回客戶端。
IntermediaryKey 返回客戶端並在那裡解密。
最後,客戶端用ClientSecretKey簽署IntermediaryKey,得到WalletPrivateKey(錢包的實際私鑰)。
此金鑰用於簽署交易,並且不會長期保存在任何地方。對於每個新操作,都會重複該步驟鏈(步驟 1 除外)。
最終,該應用程式的用戶體驗看起來很完美:由於迷你應用程式中的自動身份驗證,登入是無縫的,並且由於有應用程式內錢包,因此交易是無縫的。
如何將其添加到您的小程式中?
- 安裝 SDK:
npm install --save @tmawallet/sdk
- 初始化程式碼中的金鑰:
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);
- 進行交易的範例(此處使用 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中文網其他相關文章!

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

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

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

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

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

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

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

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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Dreamweaver Mac版
視覺化網頁開發工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境