来源:Beosin
11月10日,TON基金会在TON Gateway活动中向开发者讲述了TON的生态与技术发展,表明其重心在于如何与Telegram开展合作将数亿用户带入Web3。11月28日,Animoca Brands宣布对TON Play游戏基础设施进行投资,并成为TON的最大验证者以支持TON网络。
今天Beosin将为开发者分析TON推出的新型编程语言Tact,帮助大家了解Tact的语言特性以及安全实践。
背靠Telegram,TON有多大潜力?
TON (The Open Network) 是一个去中心化的网络平台,由TON区块链、TON Proxy、TON Storage等系统构成。其中TON区块链为TON的核心,一般所指的TON为TON区块链。
与以太坊等公链不同,TON 的智能合约之间的调用是异步的。这样的设计提高了可拓展性,因为当一个智能合约调用另一个智能合约的函数时,这个调用不会立即执行,不需要在一个区块中处理完所有的交易。但同时异步性也增加了开发者在 TON 链上开发和维护应用的门槛。
TON区块链的架构为主链(Masterchain),工作链(Workingchains)和分片链(Shardchains),具有高性能和高拓展性。TON区块链通过分片以实现百万级TPS的目标。
source: Beosin
目前,TON与Telegram已达成合作关系。Telegram将集成TON的支付和原生应用,向其超过8亿的活跃用户推广TON及其生态项目。
TON新推出的Tact语言有何特性
TON的智能合约编程语言有三种:Fift,FunC和Tact。其中Tact是TON新推出的静态类型高级编程语言,旨在降低开发智能合约的难度和提高安全性。
source: Beosin
Tact 与 Javascript 的一些语言特性相似:支持异步调用,支持面向消息编程。
1. 异步调用
Tact 支持异步调用,这样智能合约可以并行运行,无需等待其它合约完成。这增强了TON区块链的性能和响应能力。
2. 面向消息编程
(Message-Oriented Programming)
面向消息编程的核心思想是不同对象之间通过传递消息来进行通信,而不是直接互相调用。这种设计可以消除调用者和接收者之间的耦合,同时对象可以随时订阅和取消订阅消息,这让对象之间的依赖关系和更新变得更加容易。
这种降低依赖关系的设计被引入到Tact合约开发中,开发者可以基于MOP开发多个合约,合约之间通过消息进行集成和交互。这样合约之间既进行了隔离,降低了风险,又简化了交互流程,大大提升了合约开发的安全性。
Tact 智能合约的安全性
在使用 Tact 进行智能合约开发时,合约的安全性不可忽视。以下是针对使用 Tact 进行合约开发的安全建议:
1. 注意数学相关问题
开发者在处理数学计算时,需注意使用的数据类型和计算的精度问题。如果合约出现整形溢出问题,则合约会出现异常并中止当前交易。开发者需在相关业务中进行整形检查。
2. 访问控制
Tact使用面向消息编程,开发者需要对合约中涉及核心业务的函数做好访问控制,以确保相关函数接收到正确消息并被正确调用。
receive(msg: changeFee){
...
require(sender() == self.owner, "No Permission")
// 只有合约owner可以修改费用
...
}
3. 对输入消息进行验证
开发者在智能合约中应对外部输入进行适当验证或过滤,避免攻击者使用伪造的消息和和数据进行攻击。
4. 控制好消息类型
由于Tact合约开发中使用消息进行通信,开发者可能使用结构体构造新的数据类型进行消息传递,因此消息类型的数量可能会迅速增加。这可能会让代码库变得混乱。开发者需要仔细管理消息类型。
struct Point {
x: Int;
y: Int; //使用结构体自定义数据类型
}
message SetValue {
key: Int;
value: Int?;
}
5. 程序执行流程的复杂度
由于合约可随时订阅和取消订阅消息的动态特性,因此开发者在进行大型复杂项目开发时梳理应用程序的执行流程可能会困难很多。这可能会使程序的检查和测试变得困难,而清晰的文档和流程图对于后续的开发和审计会有很大帮助。
6. 进行详尽测试
开发者在进行合约开发时,应使用Sandbox进行测试,优化Gas消耗以及检查边缘情况。Sandbox会模拟合约执行的所有阶段:计算阶段(computational phase),执行阶段(actions phase)和反弹阶段(bounce phase),比起Ton-contract-executor更接近真实网络的执行情况。Tact-emulator是TON官方提供的另一个测试工具集,但目前还未有详细的使用文档。
import ...
//Tact测试模版
describe('Fireworks', () => {
...
expect(deployResult.transactions).toHaveTransaction({
...
});
});
it('should deploy', async () => {
// the check is done inside beforeEach
// blockchain and fireworks are ready to use
});
7. 错误处理
由于TON的设计,代码的结束路径需要由开发者进行处理。合约可能收到回退消息(bounced messages),合约需要对这些消息进行正确的处理。另外,在处理回退消息时还需要考虑gas耗尽的情况,这同样会产生意外的漏洞。
8. 审计与安全监测
开发者在完成项目开发后,建议进行安全审计和链上监测服务,以监控合约运行状态。Beosin的EagleEye链上监测平台为广大用户提供快捷的项目数据查询和预警。目前,EagleEye已支持分析链上巨鲸地址,检测合约风险,监控项目社媒平台和链上活动,为用户提供全面的项目信息。
趋势还是机会?如何看待TON的未来发展
在本文中,我们对 TON 进行了简单的介绍,分析了 Tact 的语言特性并提供了详细的 Tact 智能合约开发的安全实践。
Telegram作为一个全球范围内拥有庞大用户群的平台,具有巨大的潜力。而Tact作为TON基金会大力推行的新型编程语言,为开发者提供了友好且简洁的方式来构建TON网络的智能合约。这为开发者创造了更便捷的开发环境,并吸引了更多人加入TON生态项目的开发中。随着更多的开发者加入和探索,Tact语言的生态系统也将逐渐扩大,为TON网络的发展提供更多机会。
然而,需要注意的是,加密货币和区块链领域的发展仍然面临着一些挑战和风险。政府监管、市场接受度、技术问题等都可能对TON的发展产生影响。因此,对于TON的趋势和机会,我们需要持续关注市场动态、技术进展和法规环境的变化,并进行深入的研究和分析。同时,Beosin需要提醒开发者在使用Tact进行合约开发过程中需理解Tact的语言特性、注意以上提到的安全建议,在完成开发后进行安全审计也尤为重要,以检测并修复潜在的漏洞和风险。