本篇技术研报由 ScaleBit 研究团队的 Jaychois 撰写
Tact 是专为 TON 区块链量身定制的开创性编程语言,注重效率和用户友好性。其设计旨在促进学习和使用,尤其是针对智能合约。Tact 以静态类型结构为特点,具有简单直观的语法和强大的类型系统。
本文的目的是针对 Tact 进行详尽介绍,并对这种智能合约语言进行风险分析。在深入探索 Tact 之前,让我们先对 TON 进行一些了解。
开放网络(TON)是一个由多个组件构成的去中心化和开放的互联网平台。其中包括 TON 区块链、TON DNS、TON 存储和 TON 站点。TON 区块链是连接 TON 底层基础设施的核心协议,形成了更大的 TON 生态系统。
TON 聚焦于实现广泛的跨链互操作性,同时在高可扩展性的安全框架中运作。TON 的设计旨在处理每秒数百万笔交易(TPS),并最终触达数亿用户的目标。
TON 区块链被设计为分布式超级计算机或“超服务器(superserver)”,旨在提供各种产品和服务,以促进在新时代下互联网去中心化愿景的发展。
Tact 是专为 TON 区块链设计的一种新型编程语言,注重效率和简单性。它的设计目标是易于学习和使用,并且适用于智能合约。
在 Tact 的开发中,一个关键点是使其对于广泛的开发者群体而言能够快速上手。因此,它的设计类似于流行的编程语言,如 JavaScript、Python 和 Solidity。这显著简化了对语言的学习和理解,特别是对于初学者而言。
以下是 Tact 语言的一些特性:
- 可扩展性和模块化
Tact 的一个关键优势是其支持MOP(Message-Oriented Programming)原则,使其非常适合创建模块化的和可扩展的智能合约。开发者可以创建能够通过消息传递轻松相互交互的合约,从而简化不同合约之间的集成和交互。
- 异步性
Tact 支持异步消息,可以显著提高智能合约的性能。合约可以并行运行,无需等待其他合约完成。这加速了运行并增强了系统的响应能力。
- 改善交互
MOP 的应用还简化了智能合约与外部系统(如应用程序或其他区块链)之间的交互。通过标准化的消息,开发者可以轻松地将他们的合约集成到各种服务和平台中。
- 更高层次的抽象编程
在 Tact 中使用 MOP 允许开发者专注于合约的业务逻辑,而不是实现的底层细节。这简化了开发过程,使得更快地创建功能齐全、高效的合约成为可能。
- 增强安全
借助 MOP 原则,开发者可以创建更可靠和安全的智能合约。合约之间的交互变得更受控制和互相隔离,降低了安全风险,使系统更加能够抵御攻击。
TON 智能合约既可以使用 FunC 编写,也可以使用 Tact 编写,但 FunC 是一种面向深入了解 TON 架构的开发者的底层语言。FunC 让开发者摆脱了直接编写原始 Fift 代码的困扰,同时也提供了同等的控制水平。然而,由于 FunC 的精确性,编写复杂的多合约系统变得更加困难。
Tact 则使开发者能够更进一步,可以使用强类型接口编写完整的智能合约套件,并在静态验证的执行成本下运行。通过使用 Tact,能够专注于开发,而更少地担心区块链的特性。
#2 Tact 安全性的最佳实践
/ Best Practices for Tact Security
在使用 Tact 进行工作时,创建安全的智能合约是首要任务。以下是一些针对 Tact 安全性的最佳实践:
为了接收所需类型的消息,您需要声明一个接收函数,例如,receive (increment)。这表示声明了一个接收函数,当发送一个值为 increment 的文本给合约时将被调用。
函数体可以修改合约的状态并向其他合约发送消息。接收函数是公开的,可以通过向合约发送指定类型的消息来调用它;因此,当合约中有一些重要逻辑或使用接收函数进行敏感操作时,我们应该在函数中做好访问控制,以避免函数被恶意调用,从而导致严重的损害。
以下代码是一个代币铸造函数,缺乏对调用者身份的访问控制,这意味着任何人都可以滥用铸造函数,导致任意数量的新代币被铸造。
参考之前的例子,可以引入一个 owner 变量。这个所有者的身份将在合约初始化期间建立。随后,可以在铸造函数中添加一个验证步骤,确保只有指定的所有者有权铸造新代币。
在智能合约中缺乏对外部输入的适当验证或过滤,可能会导致恶意用户或攻击者输入恶意数据,从而造成不安全的行为或漏洞。
以下代码是一个缺乏对输入参数验证的提现函数,这意味着可以伪造提现数量,导致合约资金耗尽。
参考之前的例子,我们可以在提现函数中添加验证步骤,以确保提现者的账户余额满足提现数量的要求,并在提现后更新账户余额。
外部消息是那些没有发送者的消息,可以由世界上的任何人发送。外部消息是与链下系统集成或进行合约常规维护的可行性工具。在处理内部消息时,发送者通常支付 gas 费用。在处理外部消息时,则由合约支付 gas 费用。
这意味着在外部消息中需要谨慎处理 gas 的使用。需经常检查合约的 gas 使用情况,以验证一切是否按照预期运行,并避免可能导致合约余额耗尽的漏洞。
在发生异常或 gas 耗尽的情况下,后续未完成的交易将不会执行,而已执行的交易也不会回滚,它们将被部分执行。
例如,如果您从客户的余额中减去 1 ton,然后发送了一个无效的消息,这可能导致客户的余额被扣除,但他将无法收到。
因此,需要正确的状态管理。为了帮助理解和管理交易,重要的是绘制消息流程图,以最小化后续问题的风险。这将帮助您理解和管理交易,并避免未来可能出现的问题。
为确保智能合约的安全性,以下是一些其他需要注意的安全考虑:
- 彻底测试:对智能合约进行严格的测试,以识别和修复问题,考虑到各种测试案例和场景。充分利用测试网络和仿真器来验证合约行为。
- 代码审查:进行全面的代码审查,以识别和解决潜在的安全问题。与同行和安全专家合作可以显著提高代码质量。
- 智能合约审计:考虑进行第三方的安全审计,以发现漏洞并评估您的合约的整体安全性。安全审计对于需要最高级别可靠性的应用程序来说,是至关重要的一步。
在本文中,我们介绍了 TON 的新颖之处,以及 Tact 的一些语言特性,如可扩展性和模块化,并提供了开发安全的 Tact 的最佳实践。
总的来说,Tact 为在 TON 生态系统内开发智能合约提供了一个高效且用户友好的环境,使其成为在 TON 区块链上创建高效且安全智能合约的理想选择。在合约开发过程中遵循最佳实践、进行安全审计和测试也尤为重要,以最小化潜在的漏洞和风险。
ScaleBit 作为 Web3 领域领先的区块链安全团队,团队分布于硅谷、新加坡、香港、台湾等地。我们已为全球 Web3 领域 200+ 个机构和项目提供了区块链安全解决方案,累计审计代码 180,000+ 行,累计保护用户资产超过 80 亿 + 美元。Make Security Accessible for All!若您有任何安全审计需要,欢迎随时与我们取得联系,我们将为您定制细致、全面、专业的安全解决方案,护航您和 Web3 领域安全无虞!
[1] :
https://tact-lang.org/
[2] :
https://github.com/tact-lang/awesome-tact#-smart-contracts-examples
[3] :
https://blog.ton.org/why-tact-is-ton-s-next-big-breakthrough
ScaleBit 是一个为 Web3 Mass Adoption 提供安全解决方案的区块链安全团队。凭借在区块链跨链和零知识证明等扩展技术方面的专业能力,我们主要为 ZKP、Layer 2 和跨链应用提供细致和尖端的安全审计。
ScaleBit 团队由在学术界和企业界都有丰富经验的安全专家组成,致力于为可扩展的区块链生态系统的大规模应用提供安全保障。
https://www.scalebit.xyz/
https://twitter.com/scalebit_