跳转到内容

@stdlib/stoppable

提供traits,允许停止合约。 适用于应急或维护模式。 需要来自 @stdlib/ownableOwnabletrait。 该trait只管理合约中的一个标记 stopped,处理停止状态必须在合约本身中完成。

要使用该库,请导入 @stdlib/stoppable

import "@stdlib/stoppable"; // this would automatically import @stdlib/ownable too!

Traits

Stoppable

Trait Stoppable 实现了一个接收者,用于接收所有者可以发送的 Message 消息 “Stop”。它还实现了 stopped() getter 函数,如果合约已停止则返回 true(否则返回 false),并提供了私有(非 getter)函数 requireNotStopped()requireStopped()

源码:

@interface("org.ton.stoppable")
trait Stoppable with Ownable {
stopped: Bool;
owner: Address;
fun requireNotStopped() {
require(!self.stopped, "Contract stopped");
}
fun requireStopped() {
require(self.stopped, "Contract not stopped");
}
receive("Stop") {
self.requireOwner();
self.requireNotStopped();
self.stopped = true;
self.reply("Stopped".asComment());
}
get fun stopped(): Bool {
return self.stopped;
}
}

示例用法:

import "@stdlib/ownable";
import "@stdlib/stoppable";
contract MyContract with Stoppable {
owner: Address;
stopped: Bool;
init(owner: Address) {
self.owner = owner;
self.stopped = false;
}
}

Resumable

Resumable trait 扩展了 Stoppable trait,允许恢复 合约 的执行。

源码:

@interface("org.ton.resumable")
trait Resumable with Stoppable {
stopped: Bool;
owner: Address;
receive("Resume") {
self.requireOwner();
self.requireStopped();
self.stopped = false;
self.reply("Resumed".asComment());
}
}

用法示例:

import "@stdlib/ownable";
import "@stdlib/stoppable";
contract MyContract with Resumable {
owner: Address;
stopped: Bool;
init(owner: Address) {
self.owner = owner;
self.stopped = false;
}
}

资料来源