跳转到内容

@stdlib/stoppable

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

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

import "@stdlib/stoppable"; // 这也将自动导入 @stdlib/ownable!

特质

Stoppable

Trait Stoppable 实现可由所有者发送的 Message string “Stop” 的接收器、实现了 stopped() getter 函数,如果合约已停止,则返回 true(否则返回 false),并提供了私有(非getter)函数 requireNotStopped()requireStopped()

源代码

@interface("org.ton.stoppable")
trait Stoppable with Ownable {
stoppedBool;
owner: Address;
fun requireNotStopped() {
require(!self.stopped, "Contract stopped");
}
fun requireStopped() {
require(self. stopped, "Contract not stopped"); } receive("Stop") { 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 trait 扩展了 Stoppable trait,允许恢复 contract 的执行。

源代码

@interface("org.ton.resumable")
trait Resumable with Stoppable {
stoppedBool;
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;
}
}

资料来源