原作者:約翰
背景
TON(The Open Network)是一個去中心化的區塊鏈平台,最初由 Telegram 團隊設計和開發。 TON 的目標是提供一個高效能且可擴展的區塊鏈平台,以支援大規模去中心化應用程式(DApp)和智慧合約。
TON 是如此特別。它很容易使用。它與Telegram深度結合,讓普通人可以輕鬆使用代幣。它也很複雜。它具有與其他區塊鏈完全不同的架構,並使用非主流FunC智能合約語言。今天我們將從帳戶、代幣、交易的角度來討論TON的特點以及用戶資產的安全性。
TON 的特點
帳戶生成
TON 帳戶地址的產生方式與大多數區塊鏈不同。這是一個智能合約地址。首先,從私鑰開始。 TON主要使用Ed 25519演算法來產生公鑰。生成過程如下:
公鑰有兩種形式。一種是根據私鑰計算出的原始公鑰,如下所示:
E39ECDA0A7B0C60A7107EC43967829DBE8BC356A49B9DFC6186B3EAC74B5477D
另一種是美化後的公鑰,攜帶公鑰的一些資訊和校驗位,如:Pubjns2gp7DGCnEH7EOWeCnb6Lw1akm538YYaz6sdLVHfRB2
以為像以太坊一樣只要拿到公鑰就可以得到帳戶地址的想法是天真的。僅擁有用戶公鑰不足以計算用戶帳戶地址。剛才我們說了用戶的帳戶地址是智慧合約地址,但是我們連帳戶都沒有,如何部署智能合約呢?正確的順序是先計算地址,接收少量初始代幣,然後部署合約。帳戶地址的計算過程如下圖所示:
用戶地址也有多種形式。第一個是原始形式,如下圖所示:
0:b4c1b2ede12aa76f4a44353944258bcc8f99e9c7c474711a152c78b43218e296
以及使用者友善的表單,例如:
主網:
可彈跳:
EQC0wbLt4Sqnb0pENTlEJYvMj5npx8R0cRoVLHi0MhjilkPX
不可彈跳:
UQC0wbLt4Sqnb0pENTlEJYvMj5npx8R0cRoVLHi0Mhjilh4S
測試網:
可彈跳:
kQC0wbLt4Sqnb0pENTlEJYvMj5npx8R0cRoVLHi0Mhjilvhd
不可彈跳:
0QC0wbLt4Sqnb0pENTlEJYvMj5npx8R0cRoVLHi0MhjilqWY
仔細觀察這些地址會發現它們僅在第一個和最後一個字元上有所不同。中間的account_id是一樣的,但我們還是看不到公鑰和帳戶位址之間的關係。其實奧秘就在於最開始的“初始數據”,其中包含了一個用戶的公鑰,用戶透過該公鑰控制了錢包合約的所有權。 `workchainId` 很容易理解。 TON 不只是一條鏈。它是由很多碎片組成的。每個分片都是整個網路的一部分,處理一組特定的帳戶和交易。為了定位和管理智能合約,需要明確指出它們位於哪個分片中。這與智能合約的工作機制有關。我們繼續往下看。
錢包合約
以下是用戶錢包合約的原始碼。可以看到,它在接收用戶訊息時讀取了4個參數(stored_seqno、stored_subwallet、public_key、plugins):
錢包-v4-code.fc
()recv_external(切片in_msg)不純{
var 簽章 = in_msg~load_bits(512);
var cs = in_msg;
var (subwallet_id, valid_until, msg_seqno) = (cs~load_uint( 32), cs~load_uint( 32), cs~load_uint( 32));
throw_if( 36, 有效_直到
var ds = get_data().begin_parse();
var(stored_seqno,stored_subwallet,public_key,外掛程式)=(ds~load_uint(32),ds~load_uint(32),ds~load_uint(256),ds~load_dict()); ;;##初始數據
ds.end_parse();
throw_unless( 33, msg_seqno ==stored_seqno);
throw_unless( 34, subwallet_id ==stored_subwallet);
throw_unless( 35, check_signature(slice_hash(in_msg), 簽章, public_key));
//…
}
這是正確的。在部署這個用戶的錢包合約時,需要傳入一些初始參數,其中包括一個256位的public_key訊息,保證每個用戶在使用相同的合約程式碼時擁有獨立的合約位址。用戶發起的所有交易都需要對‘in_msg’進行簽名,然後透過自己的錢包合約驗證簽名(check_signature),然後合約就會呼叫鏈上的所有操作。由此我們也可以推斷,一個使用者的公鑰其實可以對應無數個錢包位址。您只需要部署不同原始碼或不同初始化資料的錢包即可獲得完全不同的合約地址。
傑頓代幣
Token是鏈上資產的表示,因此是我們需要了解的基本元素。 Jetton 是 TON 代幣的標準形式。 Jetton 由兩個合約組成,Jetton-minter 和 Jetton-wallet:
當發行代幣時,就會創建一個 Jetton-minter 合約。合約初始化記錄代幣總量、管理員、錢包代碼等資訊。
當代幣分發給用戶時,Minter合約會為用戶部署一個錢包合約,並在合約初始化時記錄用戶的餘額、所有權、代幣Minter合約地址、用戶錢包代碼等資訊。每個用戶將獨立部署一個合約。請注意,此處建立的合約是用於管理特定 Jetton 代幣的錢包合約,與用戶帳戶錢包合約不同。這裡的owner_address記錄的是用戶帳戶錢包位址。
當用戶Alice向用戶Bob轉帳時,呼叫關係如下:
Alice透過呼叫自己的錢包合約來簽署鏈下APP並發出操作指令。這些指令將進一步調用她的代幣錢包來轉移代幣。當Bobs代幣錢包收到代幣時,會通知Bobs錢包合約(即Bob Jetton-wallet的Owner地址)。如果交易過程中還有剩餘的Gas,也會被送回回應地址,通常是Alice的帳戶合約。
這是由 Tonviewer 瀏覽器解析的 Jetton 令牌傳輸:
一筆 ERC 20 轉帳至少需要一份合約調用,而 Jetton 代幣轉帳至少需要四份合約。這樣做是為了允許傳輸在鏈上同時進行,提高交易效率。
貿易
當 TON 中的帳戶發生某些事件時,它會觸發交易。最常見的事件是接收訊息。該交易包括以下內容:
-
最初觸發合約的傳入訊息(有特殊的觸發方式)
-
由傳入訊息引起的合約操作,例如更新合約儲存(可選)
-
發送給其他參與者的訊息(可選)
交易時有幾個特點要注意:
1. 非同步:TON 交易不是一次呼叫完成的。它可能需要將訊息傳遞給多個不同的智能合約來執行一系列呼叫。由於分片鏈上的路由不同,TON 無法保證多個智慧合約之間訊息傳遞的順序。
2.手續費:非同步的本質也帶來了一個問題,就是消耗的手續費很難估算。因此,在發起交易時,錢包通常會發送更多的代幣作為手續費。如果所呼叫的合約有良好的手續費處理機制,剩餘的手續費最終會回到用戶錢包。用戶可能會觀察到錢包代幣突然變少,幾分鐘後又增加。這就是原因。
3. Bounce:Bounce是合約的一種錯誤處理機制。當被呼叫合約不存在或拋出錯誤時,如果交易設定為可退回,則退回訊息將被退回到呼叫合約。例如:如果用戶發起轉賬,呼叫過程出現問題,則需要一條退回訊息,以便用戶錢包合約恢復餘額。智能合約之間發送的幾乎所有內部訊息都應該是可退回的,也就是說,應該設置它們的退回位。
資產安全
TON 有許多功能會帶來安全問題,因此使用者也需要注意一些常見的陷阱。
扣費攻擊
如上所述,錢包往往需要發送更多費用來防止交易執行失敗,這給了攻擊者作惡的機會。如果您是TON錢包用戶,您可能遇到過這樣的情況。您的錢包中總是會收到各種 NFT 或代幣。你以為只是一些垃圾代幣空投,但當你查看交易資訊時,你發現它們可以賣很多錢?然而,當發起交易時,您發現所需的費用非常高(1 TON)。這時候你就需要注意了,這可能是個收費騙局。
攻擊者利用精心建構的代幣合約,讓錢包預估的轉帳費用極高,但實際執行時,只攔截了費用,並沒有發送轉帳訊息。
第一個和最後一個號碼釣魚
首尾數位釣魚行為並非 TON 獨有,各大公鏈都存在。攻擊者將為全網每個使用者位址產生首尾數字相同的高仿帳戶。當用戶發送轉帳時,攻擊者也用高仿帳戶發送一筆小額轉賬,目的是在用戶的支付記錄中留下記錄。當接收者想要將代幣轉回時,他可能會從歷史記錄中複製該地址,並且很可能會複製到攻擊者的地址,從而導致轉入錯誤的地址。攻擊者可以準確掌握使用者的行為。
評論釣魚
TON 可以在轉帳時加入註解來備註交易資訊。此功能在交易所充值時經常使用。交易所通常要求用戶在儲值時記下自己的用戶ID。然而,該功能經常被惡意使用。攻擊者在評論中寫入詐欺訊息,騙取用戶資產。如圖所示:
用戶需要特別注意匿名電報號碼NFT。如果用戶用匿名電報號碼開通了TG號碼,但沒有開啟兩步驟驗證,一旦NFT被釣掉,駭客就可以直接登入目標TG號碼,進行後續的資產竊盜和詐騙。
智能合約漏洞
智能合約中的安全漏洞可能會導致用戶損失放置在智能合約中的資金。用戶需要選擇經過充分審核的項目。 TON 的智能合約主要使用 FunC 語言編寫,也有一些使用更高級的 Tact 或更低級別的 Fift,這些都是高度原創的語言。新的程式語言將帶來新的安全風險,尤其是對開發人員而言。他們需要有良好的安全編程習慣,掌握最佳安全實踐,並在部署到生產環境之前經過嚴格的安全審核。由於篇幅限制,本文不討論合約安全。
假儲值攻擊
錢包或交易所用戶需要警惕假儲值攻擊,一般分為兩類:
-
假幣,攻擊者發行與目標代幣相同元資料的代幣。如果自動帳戶輸入程序不檢查這是否是正確的鑄幣者合約,就會導致錯誤的帳戶輸入。
-
Bounce,TON的轉帳過程需要兩個使用者的錢包合約之間存在呼叫關係。如果接收方錢包合約不存在且交易設定為可退回,則訊息將被退回,原始資金在扣除手續費後將退還給發送方。有興趣了解詳情的朋友可以看看我們之前揭露的假儲值文章。
總結
本文從 TON 的公私鑰創建、錢包合約、代幣形式、交易特性等角度介紹了 TON 的一些基本技術原理,並討論了 TON 使用過程中可能存在的安全問題,希望給大家帶來一些幫助。大家的學習有所啟發。
參考連結:
https://github.com/ton-blockchain/wallet-contract
本文來自網路:初看TON:帳戶、代幣、交易和資產安全
原作者:1912212.eth、森林新聞 今年初比特幣現貨ETF正式獲準交易後,加密市場大幅上漲。除了比特幣之外,有些MEME幣也表現非常出色。儘管今年4月以來市場一直處於下跌趨勢,但部分代幣整體仍有不錯的市場表現。近日,福布斯公佈了2024年上半年市值超過$10億的十大表現最佳加密貨幣,包括WIF、PEPE、ASI、FLOKI、JASMY、AR、CORE、TON、BGB和BONK。值得注意的是,MEME 佔據 4 個榜單,其中 3 個屬於 Solana 生態系統。 WIF Solana 生態系統 MEME 幣,總供應量約 9.98 億枚…