初探TON:帳戶管理、Token概念、交易流程與資產安全保障


TON(The Open Network)是由Telegram團隊開發的去中心化區塊鏈平台,旨在支援大規模去中心化應用和智慧合約。 TON獨特之處在於其易用性與複雜性並存,用戶可以透過Telegram輕鬆使用代幣。該平台的帳號產生與其他區塊鏈不同,使用智慧合約位址。本文介紹了TON的帳戶、代幣(Jetton)及其交易特性,強調了資產安全的重要性,包括手續費詐騙、釣魚攻擊和智能合約風險等問題,提醒用戶在使用TON時需謹慎。

作者:Johan

背景

TON(The Open Network)是一個去中心化的區塊鏈平台,由Telegram團隊最初設計和開發。 TON的目標是提供一個高效能和可擴展的區塊鏈平台,以支援大規模的去中心化應用程式(DApps)和智慧合約。

TON如此特殊,它是易用的,它與Telegram深度結合,使得普通人也能輕鬆使用代幣;它又是複雜的,它與其他區塊鏈擁有不同的架構,而且使用非主流的FunC智能合約語言。今天我們從帳號、Token、交易的角度討論TON的特色及用戶資產安全問題。

TON 比昂

帳號生成

TON帳號的產生方式與大多數區塊鏈都不同,它是一個智慧合約地址。首先,開局一個私鑰,TON主要使用Ed25519演算法產生圖形,產生流程如下:

這裡有兩種形式的客戶端,一種是由私鑰計算的原始客戶端,形如:

E39ECDA0A7B0C60A7107EC43967829DBE8BC356A49B9DFC6186B3EAC74B5477D

另一種是「美化」後的蠟燭,它提出了蠟燭的一些資訊和校驗位,形如:Pubjns2gp7DGCnEH7EOWeCnb6Lw1akm538YYaz6sdLVHfRB2

如果認為得到一個就可以像以太坊一樣得到帳號地址就太天真了,只要有用戶的指令還請求計算出的用戶帳號地址。我們剛才說,用戶的帳號位址是智慧合約位址,但是我們連帳號都沒有,要怎麼配置智慧合約?正確的順序是先計算地址,收到一點初始金額的代幣,然後就可以配置智能合約了。帳號位址的計算過程如下圖所示:

初識TON:帳號、Token、交易與資產安全

使用者的地址也有多種形式,首先是原始形式,形如:

0:b4c1b2ede12aa76f4a44353944258bcc8f99e9c7c474711a152c78b43218e296

以及使用者習慣形式,形如:

主網:可彈跳:EQC0wbLt4Sqnb0pENTlEJYvMj5npx8R0cRoVLHi0MhjilkPX 不可彈跳:UQC0wbLt4Sqnb0pENTlEJYvMj5npx8R0cRoCCLt4Sqnb0pENTlEJYvMj5npx8R0cRodHipHibWCD50SpENT 0cRoVLHi0Mhjilvhd 不可彈跳:0QC0wbLt4Sqnb0pENTlEJYvMj5npx8R0cRoVLHi0MhjilqWY

細心觀察這幾個地址就可以看出,它們只有首尾幾個字符存在差異,中間的`account_id` 是一樣的,但是我們還是無法看出燈光和帳號地址之間的關係,其實玄機就藏在起始的`初始資料`中,它包含了一個使用者的線程,使用者就是透過它掌握錢包合約的轉發。 `workchainId`理解得很好,TON不是只有一條單鏈,它是由非常多的分片組成,每個分片都是整個網路的一部分,處理特定的一組帳號和交易。為了定位和管理智能合約,需要明確指出它們位於哪個分片中。 `Bounceable` 和`Non-bounceable` 有什麼不同?這和智能合約的機制工作相關,我們先繼續往下看。

質押合約

以下是一個用戶錢包合約的源代碼,可以看到它在接收到用戶的消息時讀取了4個參數(stored_seqno、stored_subwallet、public_key、plugins):

錢包-v4-代碼.fc

() recv_external(slice in_msg) impure { var signature = in_msg~load_bits(512); var cs = in_msg; var (subwallet_id, valid_until, msg_seqno) = (cs~load_uint(32), 2~2cs~ load_uint(32)); throw_if(36, valid_until

沒錯,這個用戶的錢包合約在部署的時候,需要確定一些初始參數,其中就包含了一個256位的public_key信息,這樣就保證了每個用戶使用相同的合約代碼時,有一個獨立的合約地址。用戶發起的一切交易都需要對`in_msg` 簽名,然後透過自己的錢包簽名驗證簽名(check_signature)後,由合約呼叫去鏈上的一切操作。從這裡我們也可以推斷出,一個用戶的公有密鑰其實是可以對應無數個錢包地址的,只需要配置不同源代碼的錢包或者不同的初始化數據,就能得到完全不同的合約地址。

傑頓代幣

Token 是鏈上資產的表現形式,所以它是我們需要了解的基本要素。 Jetton 是TON 代幣的標準形式,Jetton 由兩部分合約組成,Jetton-minter 和Jetton-wallet:

初識TON:帳號、Token、交易與資產安全

代幣發佈時,會創建一個Jetton-minter合約,承諾初始化記錄了代幣的介面、管理器、核心程式碼等資訊。

當代幣被分發給用戶時,Minter合約會為用戶部署一個錢包合約,並在簽約初始化時記錄用戶的餘額、發票、代幣合約地址、用戶錢包代碼等信息,每個用戶都會獨立部署一個合約注意,這裡創建的合約是為了管理特定Jetton代幣的錢包合約,與用戶的帳號錢包合約並不相同,這裡的owner_address還是記錄用戶的帳號錢包地址。

當Alice用戶給用戶Bob轉帳時,呼叫關係如下:

初識TON:帳號、Token、交易與資產安全

Alice在鏈下的APP簽名,並透過呼叫她的錢包合約下達操作指令。這些指令會進一步呼叫她的代幣錢包來轉帳。當Bob的代幣錢包收到代幣後,會通知Bob的錢包約定(即Bob Jetton-wallet 的Owner 地址)。如果交易過程中有剩餘的Gas,也會回傳給回應位址,通常為Alice 的帳號約定。

這是Tonviewer 瀏覽器解析的記帳Jetton 代幣轉帳:

初識TON:帳號、Token、交易與資產安全

一個ERC20區塊鏈最少只需要調用一個合約,而要求Jetton代幣提高區塊鏈至少要調用四個合約,這是為了讓區塊鏈可以在鏈上合約進行,交易效率。

交易

當TON 中的某個帳戶發生某些事件時,它會觸發一筆交易,最常見的事件是“接收某個訊息”,交易包括以下內容:

初始觸發契約的確定訊息(存在特殊的觸發方式) 由確定訊息引起的合約行動,例如更新合約的儲存(可選) 發送給其他參與者的傳出訊息(任選)

初識TON:帳號、Token、交易與資產安全

交易需要注意的幾個特性:

1.非同步:TON的交易不是在一次呼叫裡完成的,它可能需要透過訊息傳遞到多個不同的智能合約去執行一系列呼叫。由於分片鏈中的路由不同,TON並不能保證多個智慧合約之間的訊息傳送順序。

2. 手續費:非同步的特性還會帶來一個問題,就是消耗的手續費難以因此結算。在發起交易時,錢包通常會多發送一些代幣做手續費。如果所呼叫的約定良好的手續費處理機制,那麼剩餘的手續費最後會退還給用戶錢包。用戶可能會觀察到錢包代幣突然變少,過四分之一變多,就是這個原因。

3. 反彈:反彈是合約的一種錯誤機制處理,當合約的合約不存在或觸發錯誤時,如果交易設定為可反彈的,那麼就會反彈回一個反彈訊息給發起合約的合約。例如:用戶發起轉帳回合,如果呼叫過程出錯了,那麼就需要刷新訊息,這樣用戶的錢包合約才能將自己的餘額恢復。幾乎所有在智能合約之間發送的內部訊息都應該是可彈回的,也就是應該設定它們的「反彈」位置。

資產安全

TON 有許多功能會帶來安全問題,因此使用者也需要了解一些常見的陷阱。

訴訟費用留雲

上面說到錢包經常需要多發送一些手續費以防止交易執行失敗,這讓攻擊者找到了作惡的機會。如果你是一大堆錢包用戶,你可能經歷過這樣的情況,錢包裡總是會收款到各種NFT或者但是代幣,本以為只是一些垃圾代幣空投,一查交易信息,居然可以賣現錢?然而當發起交易時,發現所需的手續費超高(1 TON),接下來就需要注意了,這可能是手續費詐騙。

初識TON:帳號、Token、交易與資產安全

攻擊者利用提出的錢包建構的代幣合約,讓交易所交易手續費很高,而實際執行時卻只是截留手續費,容易造成交易訊息。

尾號釣魚

首尾號釣魚不是TON上一致,四大公鏈都存在這種釣魚攻擊。攻擊者會為全網每個使用者位址產生一個首尾號相同的高仿帳號,當使用者敲擊回合時,攻擊者使用高仿帳號也尾隨筆劃小額轉賬,目的是在使用者的收款記錄裡留下一筆記錄。當收款用戶想要轉回筆畫代幣時,可能會從歷史記錄裡複製地址,這時候很可能複製到攻擊者的地址,導致轉向錯誤地址,攻擊者就精準地抓住了用戶的行為了。

評測釣魚

TON 在一周時可以添加一條評測,用於備註交易信息,該功能在交易所充值時會重置使用,交易所通常會要求用戶在充值時備註一下用戶ID。但該功能經常被惡意利用,攻擊者透過備註裡發送詐騙訊息來騙取用戶的資產。如圖所示:

初識TON:帳號、Token、交易與資產安全

用戶需要特別注意匿名電報號這個NFT,如果用戶用匿名電報號開通了TG號,但沒有開兩步驗證,一旦這個NFT釣魚被走,黑客就可以直接登錄目標TG號,實施後續的資產盜取取及欺騙行為。

智能合約風險

智能合約的安全漏洞會導致用戶放在智能合約的資金受損,用戶在選擇專案時需要選擇經過良好審計的專案。 TON的智能合約語言主要使用FunC來編程,也有使用更高階的Tact,或更簡單的五,都是原創程度的語言。新的程式語言會帶來新的安全風險,特別是對開發者而言,練習安全程式設計的良好習慣,掌握最佳安全實踐,並在使用中生產環境之前經過嚴格的安全審計,限於篇幅,本文暫不討論契約安全。慢霧安全團隊推出TON智慧契約安全審計服務,歡迎有審計需求的朋友一起探討。

假儲值攻擊

錢包或交易所用戶需要注意假儲值攻擊,通常有兩種類型的假儲值攻擊:

假幣,攻擊者發布一個元資料和目標代幣相同的代幣就會,如果自動化入帳程式沒有檢查這是否是正確的鑄幣合約,那麼會導致入帳錯誤。 反彈,TON的轉帳過程需要在兩個用戶的錢包合約之間發生呼叫關係,如果接收方的錢包合約不存在,並且交易設定為Bounceable,接下來訊息會重啟,原始資金將在交易手續費後返還給發送方。對有興趣的朋友可以查看我們之前披露過的假儲值文章。

總結

本文從TON 的公私金鑰創建、錢包合約、Token 的形式、交易特性等角度介紹了TON 的一些基礎技術原理,同時也探討了使用TON 的過程中可能存在的安全問題,希望可供大家的學習帶來啟示。

參考文獻:

https://docs.ton.org/

https://github.com/ton-blockchain/wallet-contract

資訊來源:0x資訊編譯自網際網路。版權歸作者慢霧科技所有,未經許可,不得轉載

Total
0
Shares
Related Posts