Message `mode`
如前所述,消息是通过结构体 SendParameters
的 mode
参数发送的。 这是一个Int
值,由基本模式和可选标志组合而成,这些也是Int
值。
您可以使用原始的 Int
值,并手动为 mode
提供这些值,但为了方便起见,您可以使用一组常量来轻松构建复合 mode
。有关基本模式和可选标记的更多消息,请参阅下表。 有关基本模式和可选标记的更多消息,请参阅下表。
基本模式
模式值 | 常量名称 | 说明 |
---|---|---|
C | Since Tact 1.6 SendDefaultMode | 普通消息(默认)。 |
SendRemainingValue | 除了新信息中最初显示的值外,还携带所有入站信息的剩余值. | |
SendRemainingBalance | 携带当前智能合约的所有余额,而不是消息中最初显示的值。 |
可选标记
标志值 | 常量名称 | 说明 |
---|---|---|
SendPayGasSeparately | 将转发费用与消息价值分开支付。 | |
SendIgnoreErrors | 忽略行动阶段处理该消息时出现的任何错误。 | |
SendBounceIfActionFail | 如果在行动阶段出现任何错误,则退回交易。 如果使用了标志 , SendIgnoreErrors ,则没有影响。 | |
SendDestroyIfZero | 如果当前账户的余额为零,则必须销毁该账户(通常与模式 , SendRemainingBalance 一起使用)。 |
将模式与标志(flags)相结合
要为 SendParameters
的 mode
字段创建 Int
值,只需通过 bitwise OR 运算将基本模式与可选标记结合起来。
例如,如果您想分别发送普通消息和支付转账费用,请使用模式 (默认)和标志 ,以获得 mode
,这等同于使用 SendPayGasSeparately
常量。
或者,如果要发送全部合约余额并立即销毁,使用模式 和标志 ,得到 mode
,相当于 SendRemainingBalance | SendDestroyIfZero
常量。
下面是后一个示例的代码:
let to: Address = address("...");let value: Int = ton("1");send(SendParameters{ to: to, value: value, mode: SendRemainingBalance | SendDestroyIfZero, body: "Hello, World!".asComment(),});