Appearance
单合约通信
本页面列举了一个已部署合约与区块链上其他合约进行通信的示例。
查看多合约之间的通信示例,请参见:多合约通信。
如何进行基本回复
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(),
});
有用的链接:
没有找到您喜欢的单合约通信示例?心中有酷炫的实现想法?欢迎贡献!