@stdlib/stoppable
提供traits,允许停止合约。 适用于应急或维护模式。 需要来自 @stdlib/ownable 的 Ownabletrait。 该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() { throwUnless(TactExitCodeContractStopped, !self.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; }}