Skip to content

单合约通信

本页面列举了一个已部署合约与区块链上其他合约进行通信的示例。

查看多合约之间的通信示例,请参见:多合约通信

如何进行基本回复

javascript
receive() {
    self.reply("Hello, World!".asComment()); // asComment 将字符串转换为带有评论的单元格
}

如何发送简单消息

javascript
send(SendParameters{
    bounce: true, // 默认值
    to: destinationAddress,
    value: ton("0.01"), // 附加发送的Tons数量
    body: "Hello from Tact!".asComment() // 评论(可选)
});

如何发送包含全部余额的消息

如果我们需要发送智能合约的全部余额,那么应使用 SendRemainingBalance 发送模式。或者,我们可以使用 mode: 128,其含义相同。

javascript
send(SendParameters{
    // 默认 bounce = true
    to: sender(), // 将消息发送回原始发送者
    value: 0,
    mode: SendRemainingBalance, // 或 mode: 128
    body: "Hello from Tact!".asComment() // 评论(可选)
});

如何发送包含剩余值的消息

如果我们想对同一个发送者进行回复,我们可以使用 SendRemainingValue 模式(即 mode: 64),这会在新消息中最初指示的值之外,携带所有入站消息的剩余值。

javascript
send(SendParameters{
    // 默认 bounce = true
    to: sender(), // 将消息发送回原始发送者
    value: 0,
    mode: SendRemainingValue,
    body: "Hello from Tact!".asComment() // 评论(可选)
});

在处理此消息的行动阶段中,忽略任何错误通常很有用,可以添加 SendIgnoreErrors 标志:

javascript
send(SendParameters{
    // 默认 bounce = true
    to: sender(), // 将消息发送回原始发送者
    value: 0,
    mode: SendRemainingValue | SendIgnoreErrors, // 使用 | 而非 + 来设置模式
    body: "Hello from Tact!".asComment()         // 评论(可选)
});

后一个示例与使用 .reply() 函数相同。

如何发送带有长文本评论的消息

如果我们需要发送带有长文本评论的消息,应创建一个包含超过 127 个字符的字符串。为此,我们可以使用 StringBuilder 原始类型及其名为 beginComment() 和 append() 的方法。发送前,应使用 toCell() 方法将此字符串转换为单元格。

javascript
let comment: StringBuilder = beginComment();
let longString = "..."; // 一个超过 127 个字符的字符串。
str_builder.append(longString);

send(SendParameters{
    // 默认 bounce = true
    to: sender(),
    value: 0,
    mode: SendIgnoreErrors,
    body: longString.toCell(),
});

有用的链接:

没有找到您喜欢的单合约通信示例?心中有酷炫的实现想法?欢迎贡献!