1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
multiversx_sc::imports!();
/// Standard smart contract module that, when added to a smart contract, offers pausability.
///
/// It provides a flag that contracts can use to check if owner decided to pause the entire contract.
/// Use the features module for more granular on/off switches.
///
/// It offers:
/// * an endpoint where the owner can pause/unpause contract
/// * a method to check if contract is paused or not
///
#[multiversx_sc::module]
pub trait PauseModule {
#[inline]
fn is_paused(&self) -> bool {
self.paused_status().get()
}
#[inline]
fn not_paused(&self) -> bool {
!self.is_paused()
}
#[inline]
fn set_paused(&self, paused: bool) {
self.paused_status().set(paused);
}
#[only_owner]
#[endpoint(pause)]
fn pause_endpoint(&self) {
self.set_paused(true);
// TODO: event
}
#[only_owner]
#[endpoint(unpause)]
fn unpause_endpoint(&self) {
self.set_paused(false);
// TODO: event
}
fn require_paused(&self) {
require!(self.is_paused(), "Contract is not paused");
}
fn require_not_paused(&self) {
require!(self.not_paused(), "Contract is paused");
}
#[view(isPaused)]
#[storage_mapper("pause_module:paused")]
fn paused_status(&self) -> SingleValueMapper<bool>;
}