Skip to content

@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;
    }
}

源代码