Skip to content

消息生命周期

合约处理消息有几个阶段,虽然有更多阶段,但我们将关注最重要的几个:

接收阶段

这个阶段结合了多个低级阶段。

首先,它将消息的价值添加到合约余额中。来访消息的价值是合约可以为处理此消息支付的最高燃气费用。合约可以覆盖这个限制,但不推荐这样做,只适合高级开发人员使用,因为这可能导致合约资金耗尽。在单个合约中,合约可以花费的最大燃气量是 100 万,相当于 1 TON(目前)。如果消息价值为零,则执行将中止。

然后,合约余额会被扣除一些(通常是少量的)纳吨用于存储。这意味着你无法完美预测余额变化,必须调整你的代码以适应这种不稳定性。

接着,如果合约尚未部署且消息包含初始化包,则部署合约。如果没有初始化包,将忽略之。

计算阶段

这个阶段执行智能合约的代码,并产生一个动作列表或一个异常。当前只支持两种类型的动作:发送消息和保留。

发送消息可以使用固定值或动态值,例如消息剩余值——即来访消息的剩余价值。发送消息可以带有一个标志 SendIgnoreErrors,该标志在发送消息时忽略错误,并继续执行下一个动作。如果你有多个动作,这个标志很有用。发送带有某些价值的消息时,它首先从来访价值中扣除这个价值,然后才从合约余额中扣除(在处理之前)。

动作阶段

动作按顺序执行,但请记住:处理动作期间的异常不会撤销交易

例如,如果你从客户的余额中扣除 1 吨,然后发送一个无效的消息,可能会导致客户的余额被扣除,但他不会收到它。