深入解析 Tact 語言及 TON 生態,揭示特性與安全最佳實踐

更新於 2023/11/19 上午7:55:53

深入解析 Tact 語言及 TON 生態,揭示特性與安全最佳實踐
深入解析 Tact 語言及 TON 生態,揭示特性與安全最佳實踐

簡介

Tact 是專為 TON 區塊鏈量身定制的開創性編程語言,注重效率和用戶友好性。其設計旨在促進學習和使用,尤其是針對智能合約。Tact 以靜態類型結構為特點,具有簡單直觀的語法和強大的類型系統。

本文的目的是針對 Tact 進行詳盡介紹,並對這種智能合約語言進行風險分析。在深入探索 Tact 之前,讓我們先對 TON 進行一些瞭解。

什麼是 TON?

開放網絡(The Open Network,TON)是一個由多個組件構成的去中心化和開放的互聯網平台。其中包括 TON 區塊鏈、TON DNS、TON 存儲和 TON 站點。TON 區塊鏈是連接 TON 底層基礎設施的核心協議,形成了更大的 TON 生態系統。

TON 聚焦於實現廣泛的跨鏈互操作性,同時在高可擴展性的安全框架中運作。TON 的設計旨在處理每秒數百萬筆交易(TPS),並最終觸達數億用戶的目標。

TON 區塊鏈被設計為分布式超級計算機或「超服務器(superserver)」,旨在提供各種產品和服務,以促進在新時代下互聯網去中心化願景的發展。

Tact 簡介

Tact 是專為 TON 區塊鏈設計的一種新型編程語言,注重效率和簡單性。它的設計目標是易於學習和使用,並且適用於智能合約。

在 Tact 的開發中,一個關鍵點是使其對於廣泛的開發者群體而言能夠快速上手。因此,它的設計類似於流行的編程語言,如 JavaScript、Python 和 Solidity。這顯著簡化了對語言的學習和理解,特別是對於初學者而言。

Tact 語言特性

以下是 Tact 語言的一些特性:

  1. 可擴展性和模塊化:Tact 的一個關鍵優勢是其支持MOP(Message-Oriented Programming)原則,使其非常適合創建模塊化的和可擴展的智能合約。開發者可以創建能夠通過消息傳遞輕鬆相互交互的合約,從而簡化不同合約之間的集成和交互。
  2. 異步性:Tact 支持異步消息,可以顯著提高智能合約的性能。合約可以並行運行,無需等待其他合約完成。這加速了運行並增強了系統的響應能力。
  3. 改善交互:MOP 的應用還簡化了智能合約與外部系統(如應用程序或其他區塊鏈)之間的交互。通過標準化的消息,開發者可以輕鬆地將他們的合約集成到各種服務和平台中。
  4. 更高層次的抽象編程:在 Tact 中使用 MOP 允許開發者專注於合約的業務邏輯,而不是實現的底層細節。這簡化了開發過程,使得更快地創建功能齊全、高效的合約成為可能。
  5. 增強安全:借助 MOP 原則,開發者可以創建更可靠和安全的智能合約。合約之間的交互變得更受控制和互相隔離,降低了安全風險,使系統更加能夠抵御攻擊。

Tact 與 FunC

TON 智能合約既可以使用 FunC 編寫,也可以使用 Tact 編寫,但 FunC 是一種面向深入瞭解 TON 架構的開發者的底層語言。FunC 讓開發者擺脫了直接編寫原始 Fift 代碼的困擾,同時也提供了同等的控制水平。然而,由於 FunC 的精確性,編寫複雜的多合約系統變得更加困難。

Tact 則使開發者能夠更進一步,可以使用強類型接口編寫完整的智能合約套件,並在靜態驗證的執行成本下運行。通過使用 Tact,能夠專注於開發,而更少地擔心區塊鏈的特性。

Tact 語言的最佳實踐

在使用 Tact 進行工作時,創建安全的智能合約是首要任務。以下是一些針對 Tact 安全性的最佳實踐:

1. 訪問控制

為了接收所需類型的消息,您需要聲明一個接收函數,例如,receive (increment)。這表示聲明瞭一個接收函數,當發送一個值為 increment 的文本給合約時將被調用。

函數體可以修改合約的狀態並向其他合約發送消息。接收函數是公開的,可以通過向合約發送指定類型的消息來調用它;因此,當合約中有一些重要邏輯或使用接收函數進行敏感操作時,我們應該在函數中做好訪問控制,以避免函數被惡意調用,從而導致嚴重的損害。

舉例:

以下代碼是一個代幣鑄造函數,缺乏對調用者身份的訪問控制,這意味著任何人都可以濫用鑄造函數,導致任意數量的新代幣被鑄造。

缺乏對調用者身份的訪問控制的代幣鑄造函數
缺乏對調用者身份的訪問控制的代幣鑄造函數

建議

參考之前的例子,可以引入一個 owner 變量。這個所有者的身份將在合約初始化期間建立。隨後,可以在鑄造函數中添加一個驗證步驟,確保只有指定的所有者有權鑄造新代幣。

確保只有指定的所有者有權鑄造新代幣
確保只有指定的所有者有權鑄造新代幣

2. 未驗證的消息輸入

在智能合約中缺乏對外部輸入的適當驗證或過濾,可能會導致惡意用戶或攻擊者輸入惡意數據,從而造成不安全的行為或漏洞。

舉例:

以下代碼是一個缺乏對輸入參數驗證的提現函數,這意味著可以偽造提現數量,導致合約資金耗盡。

未驗證的消息輸入
未驗證的消息輸入

建議:

參考之前的例子,我們可以在提現函數中添加驗證步驟,以確保提現者的賬戶餘額滿足提現數量的要求,並在提現後更新賬戶餘額。

在提現函數中添加驗證步驟
在提現函數中添加驗證步驟

3. 檢查 Gas 消耗

外部消息是那些沒有發送者的消息,可以由世界上的任何人發送。外部消息是與鏈下系統集成或進行合約常規維護的可行性工具。在處理內部消息時,發送者通常支付 gas 費用。在處理外部消息時,則由合約支付 gas 費用。

這意味著在外部消息中需要謹慎處理 gas 的使用。需經常檢查合約的 gas 使用情況,以驗證一切是否按照預期運行,並避免可能導致合約餘額耗盡的漏洞。

4. 交易的部分執行

在發生異常或 gas 耗盡的情況下,後續未完成的交易將不會執行,而已執行的交易也不會回滾,它們將被部分執行。

例如,如果您從客戶的餘額中減去 1 ton,然後發送了一個無效的消息,這可能導致客戶的餘額被扣除,但他將無法收到。

因此,需要正確的狀態管理。為了幫助理解和管理交易,重要的是繪制消息流程圖,以最小化後續問題的風險。這將幫助您理解和管理交易,並避免未來可能出現的問題。

5. 其他安全考慮

為確保智能合約的安全性,以下是一些其他需要注意的安全考慮:

  • 徹底測試:對智能合約進行嚴格的測試,以識別和修復問題,考慮到各種測試案例和場景。充分利用測試網絡和仿真器來驗證合約行為。
  • 代碼審查:進行全面的代碼審查,以識別和解決潛在的安全問題。與同行和安全專家合作可以顯著提高代碼質量。
  • 智能合約審計:考慮進行第三方的安全審計,以發現漏洞並評估您的合約的整體安全性。安全審計對於需要最高級別可靠性的應用程序來說,是至關重要的一步。

結論

在本文中,我們介紹了 TON 的新穎之處,以及 Tact 的一些語言特性,如可擴展性和模塊化,並提供了開發安全的 Tact 的最佳實踐。

總的來說,Tact 為在 TON 生態系統內開發智能合約提供了一個高效且用戶友好的環境,使其成為在 TON 區塊鏈上創建高效且安全智能合約的理想選擇。在合約開發過程中遵循最佳實踐、進行安全審計和測試也尤為重要,以最小化潛在的漏洞和風險。

ScaleBit 作為 Web3 領域領先的區塊鏈安全團隊,團隊分布於硅谷、新加坡、香港、台灣等地。我們已為全球 Web3 領域 200+ 個機構和項目提供了區塊鏈安全解決方案,累計審計代碼 180,000+ 行,累計保護用戶資產超過 80億+ 美元。

Make Security Accessible for All!若您有任何安全審計需要,歡迎隨時與我們取得聯繫,我們將為您定制細緻、全面、專業的安全解決方案,護航您和 Web3 領域安全無虞!

聯繫方式:nissa@scalebit.xyz

關於 ScaleBit

ScaleBit 是一個為 Web3 Mass Adoption 提供安全解決方案的區塊鏈安全團隊。憑借在區塊鏈跨鏈和零知識證明等擴展技術方面的專業能力,我們主要為 ZKP、Layer 2 和跨鏈應用提供細緻和尖端的安全審計。

ScaleBit 團隊由在學術界和企業界都有豐富經驗的安全專家組成,致力於為可擴展的區塊鏈生態系統的大規模應用提供安全保障。

  • 網站:https://www.scalebit.xyz/
  • 推特:https://twitter.com/scalebit_
  • Email:nissa@scalebit.xyz

參考資料