Appearance
@stdlib/stoppable
提供允许停止 合约 的 traits。在紧急情况或维护模式下非常有用。需要使用 @stdlib/ownable
中的 Ownable
trait。此 trait 仅管理合约中的一个 stopped
标志,处理停止状态需在合约中自行完成。
要使用此库,请导入 @stdlib/stoppable
:
solidity
import "@stdlib/stoppable"; // 这将自动导入 @stdlib/ownable!
特性
Stoppable
Trait Stoppable
实现了一个接收者,用于接收可以由所有者发送的 消息 字符串 "Stop"。它实现了 stopped()
getter 函数,如果合约被停止则返回 true
(否则返回 false
),并提供私有(非 getter)函数 requireNotStopped()
和 requireStopped()
。
源代码:
solidity
@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;
}
}
使用示例:
solidity
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,允许恢复 合约 执行。
源代码:
solidity
@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());
}
}
使用示例:
solidity
import "@stdlib/ownable";
import "@stdlib/stoppable";
contract MyContract with Resumable {
owner: Address;
stopped: Bool;
init(owner: Address) {
self.owner = owner;
self.stopped = false;
}
}