使用 TON 区块链时应注意的事项
在本文中,我们将回顾和讨论希望开发 TON 应用程序的人员需要考虑的要素。
检查清单
1.名称碰撞
Func 变量和函数几乎可以包含任何合法字符。例如,var++
、~bits
、foo-bar+baz
(包括逗号)都是有效的变量和函数名。
在编写和检查 Func 代码时,应使用 Linter。
2. 检查抛出值
TVM 的执行每次正常停止时,都会以退出代码 0
或 1
停止。虽然 TVM 是自动执行的,但如果通过 throw(0)
或 throw(1)
命令直接抛出退出代码 0
和 1
,TVM 的执行可能会被意外直接中断。
3. Func 是一种严格类型化的语言,其数据结构存储的正是它们应该存储的内容
跟踪代码的操作和可能返回的结果至关重要。请记住,编译器只关心代码,而且只关心代码的初始状态。在某些操作之后,某些变量的存储值可能会发生变化。
读取意外变量值和调用不应该有此类方法的数据类型的方法(或其返回值未正确存储)都是错误,不会作为 "警告 "或 "通知 "跳过,而是会导致代码无法运行。请记住,存储意外值可能没有问题,但读取意外值可能会导致问题,例如,对于整数变量,可能会抛出错误代码 5(整数超出预期范围)。
4.信息具有模式(modes)
必须检查报文模式,特别是它与之前发送的报文和费用之间的相互关系。可能出现的故障是没有考虑存储费用,在这种情况下,合约可能会耗尽 TON,导致发送信息时出现意外故障。您可以查看消息模式 此处。
5. TON完全实现演员模型
这意味着合约的代码可以更改。既可以使用 SETCODE
TVM 指令永久更改代码,也可以在运行时将 TVM 代码注册表设置为新的 cell 值,直到执行结束。
6.TON 区块链有几个交易阶段:计算阶段、行动阶段和反弹阶段。
计算阶段会执行智能合约的代码,然后才会执行操作(发送消息、修改代码、更改库等)。因此,与基于以太坊的区块链不同的是,如果你预计发送的消息会失败,就不会看到计算阶段的退出代码,因为它不是在计算阶段执行的,而是在之后的操作阶段执行的。
7. TON 合约是自治的
区块链中的合约可以驻留在不同的分片中,由其他验证器处理,这意味着开发者无法按需从其他合约中获取数据。因此,任何通信都是异步的,通过发送消息来完成。