@stdlib/stoppable
提供traits,允许停止合约。 适用于应急或维护模式。 需要来自 @stdlib/ownable
的 Ownable
trait。 该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; }}