跳转到内容

基本特质

Tact 中的每个 contracttrait 都隐式 继承 BaseTrait trait,该 trait 包含大量对任何类型的 contract 最有用的 internal functions 以及一个针对 Tact 高级用户的常量 self.storageReserve

常数

self.storageReserve

virtual const storageReserveInt = 0

使用示例

contract AllYourStorageBelongsToUs {
// 这将改变 self.forward() 函数的行为,
// 使其在
// 使用 SendRemainingBalance 模式转发消息之前,尝试保留此数量的纳吨币
override const storageReserveInt = ton("0.1");
}

功能

self.reply

virtual fun reply(body: Cell?);

使用以下参数调用 self.forward()函数的别名:

self.forward(sender(), body, true, null);
// ↑ ↑ ↑ ↑
// | | | init: StateInit?
// | | bounce: Bool
// | body: Cell?
// to: Address

使用示例

// 这条信息会反弹给我们!
self.reply("Beware, this is my reply to you!".asComment());

self.notify

virtual fun notify(body: Cell?);

使用以下参数调用 self.forward()函数的别名:

self.forward(sender(), body, false, null);
// ↑ ↑ ↑ ↑
// | | | init: StateInit?
// | | bounce: Bool
// | body: Cell?
// to: Address

使用示例

// 此消息不会跳转!
self.notify("Beware, this is my reply to you!".asComment());

self.forward

virtual fun forward(to: Address, body: Cell?, bounce: Bool, init: StateInit?);

将信息(可跳转或不可跳转)发送到指定地址 to。 您可以选择提供信息的 “body “和init

self.storageReserve常量被覆盖为>0> 0时,在发送信息之前,它也会尝试从剩余余额中预留self.storageReservenanoToncoins金额,然后再以SendRemainingBalance(128128) 模式发送信息。

如果预订尝试失败,或在默认情况下没有尝试,则会以SendRemainingValue6464)模式发送信息。

使用示例

import "@stdlib/ownable";
message PayoutOk {
addressAddress;
valueInt as coins;
}
Ownable 签订 Payout 合同 {
completedBool;
owner: Address;
init(owner: Address) {
self.owner = owner;
self.completed = false;
}
// ......一些操作 ...
// 被退回的接收函数,当指定的发送信息被退回时被调用
bounced(msg: bounced<PayoutOk>) {
// 如果我们的信息被退回,则重置完成标志
self.completed = false;
// 使用处理此发送的剩余资金发送支付失败的通知
self.forward(self.owner, "Payout failed".asComment(), false, null);
} // 如果我们的信息被退回,则重置完成标志。
}