跳转到内容

Message `mode`

如前所述,消息是通过结构体 SendParametersmode 参数发送的。 这是一个Int值,由基本模式和可选标志组合而成,这些也是Int值。

您可以使用原始的 Int值,并手动为 mode 提供这些值,但为了方便起见,您可以使用一组常量来轻松构建复合 mode。有关基本模式和可选标记的更多消息,请参阅下表。 有关基本模式和可选标记的更多消息,请参阅下表。

基本模式

模式值常量名称说明
00CSince Tact 1.6 SendDefaultMode普通消息(默认)。
6464SendRemainingValue除了新信息中最初显示的值外,还携带所有入站信息的剩余值.
128128SendRemainingBalance携带当前智能合约的所有余额,而不是消息中最初显示的值。

可选标记

标志值常量名称说明
+1+1SendPayGasSeparately将转发费用与消息价值分开支付。
+2+2SendIgnoreErrors忽略行动阶段处理该消息时出现的任何错误。
+16+16SendBounceIfActionFail如果在行动阶段出现任何错误,则退回交易。 如果使用了标志 +2+2, SendIgnoreErrors,则没有影响。
+32+32SendDestroyIfZero如果当前账户的余额为零,则必须销毁该账户(通常与模式 128128, SendRemainingBalance 一起使用)。

将模式与标志(flags)相结合

要为 SendParametersmode 字段创建 Int 值,只需通过 bitwise OR 运算将基本模式与可选标记结合起来。

例如,如果您想分别发送普通消息和支付转账费用,请使用模式 00(默认)和标志 +1+1,以获得 mode =1= 1,这等同于使用 SendPayGasSeparately 常量。

或者,如果要发送全部合约余额并立即销毁,使用模式 128128 和标志 +32+32,得到 mode =160= 160,相当于 SendRemainingBalance | SendDestroyIfZero 常量。

下面是后一个示例的代码:

let to: Address = address("...");
let value: Int = ton("1");
send(SendParameters{
to: to,
value: value,
mode: SendRemainingBalance | SendDestroyIfZero,
body: "Hello, World!".asComment(),
});