跳转到内容

接收消息

TON 是一个分布式区块链,这意味着合约之间的通信是通过发送和接收信息完成的。 最常见的消息类型是内部消息――从一个合约(或一个钱包)发给另一个合约。

接收内部消息

要接收所需类型的消息,您需要声明一个接收函数,例如receive("increment")。 此符号表示接收器函数的声明,当具有值 "increment" 的文本被发送到合约时,将调用该函数。 函数体可以修改合约的状态,并向其他合约发送消息。 不可能直接调用receiver。 如果需要重用某些逻辑,可以声明一个函数,然后从receiver中调用。

有多个接收函数。 所有接收函数的处理顺序如下:

  • receive() - 向合约发送空消息时调用。
  • receive("message") - 向合约发送带有特定注释的文本消息时调用。
  • receive(str: String) - 向合约发送任意文本消息时调用。
  • receive(msg: MyMessage)-当向合约发送 MyMessage 类型的二进制消息时调用。
  • receive(msg: Slice) - 向合约发送未知类型的二进制消息时调用。
message MyMessage {
value: Int;
}
contract MyContract {
receive() {
// ...
}
receive("message") {
// ...
}
receive(str: String) {
// ...
}
receive(msg: MyMessage) {
// ...
}
receive(msg: Slice) {
// ...
}
}

用下划线_命名接收函数的参数时,其值将被视为未使用的值并被丢弃。 当您不需要检查接收到的消息,而只想让它传达特定的操作码时,这就很有用了:

message(42) UniverseCalls {}
contract Example {
receive(_: UniverseCalls) {
// Got a Message with opcode 42
}
}