@stdlib/stoppable
Provides traits that allow to stop a contract. Useful for emergency or maintenance modes. Requires an Ownable trait from @stdlib/ownable. This trait just manages a single flag stopped
in the contract and handling stopped state have to be done in the contract itself.
To use this library, import @stdlib/stoppable
and @stdlib/ownable
:
import "@stdlib/ownable";
import "@stdlib/stoppable";
Traits
Stoppable
Trait Stoppable
implements receiver for the message string "Stop" that can be sent by owner, implements stopped
get-method that returns true
if contract is stopped and provides private (non-getter) functions requireNotStopped
and requireStopped
.
Source code:
@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;
}
}
Usage example:
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 extends Stoppable and allows to resume contract execution.
Source code:
@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());
}
}
Usage example:
import "@stdlib/ownable";
import "@stdlib/stoppable";
contract MyContract with Resumable {
owner: Address;
stopped: Bool;
init(owner: Address) {
self.owner = owner;
self.stopped = false;
}
}