SafeMode¶
Calls¶
enter¶
Enter safe-mode permissionlessly for [Config::EnterDuration
] blocks.
Reserves [Config::EnterDepositAmount
] from the caller's account.
Emits an [Event::Entered
] event on success.
Errors with [Error::Entered
] if the safe-mode is already entered.
Errors with [Error::NotConfigured
] if the deposit amount is None
.
Attributes¶
No attributes
Python¶
call = substrate.compose_call(
'SafeMode', 'enter', {}
)
extend¶
Extend the safe-mode permissionlessly for [Config::ExtendDuration
] blocks.
This accumulates on top of the current remaining duration.
Reserves [Config::ExtendDepositAmount
] from the caller's account.
Emits an [Event::Extended
] event on success.
Errors with [Error::Exited
] if the safe-mode is entered.
Errors with [Error::NotConfigured
] if the deposit amount is None
.
This may be called by any signed origin with [Config::ExtendDepositAmount
] free
currency to reserve. This call can be disabled for all origins by configuring
[Config::ExtendDepositAmount
] to None
.
Attributes¶
No attributes
Python¶
call = substrate.compose_call(
'SafeMode', 'extend', {}
)
force_enter¶
Enter safe-mode by force for a per-origin configured number of blocks.
Emits an [Event::Entered
] event on success.
Errors with [Error::Entered
] if the safe-mode is already entered.
Can only be called by the [Config::ForceEnterOrigin
] origin.
Attributes¶
No attributes
Python¶
call = substrate.compose_call(
'SafeMode', 'force_enter', {}
)
force_exit¶
Exit safe-mode by force.
Emits an [Event::Exited
] with [ExitReason::Force
] event on success.
Errors with [Error::Exited
] if the safe-mode is inactive.
Note: safe-mode
will be automatically deactivated by [Pallet::on_initialize
] hook
after the block height is greater than the [EnteredUntil
] storage item.
Emits an [Event::Exited
] with [ExitReason::Timeout
] event when deactivated in the
hook.
Attributes¶
No attributes
Python¶
call = substrate.compose_call(
'SafeMode', 'force_exit', {}
)
force_extend¶
Extend the safe-mode by force for a per-origin configured number of blocks.
Emits an [Event::Extended
] event on success.
Errors with [Error::Exited
] if the safe-mode is inactive.
Can only be called by the [Config::ForceExtendOrigin
] origin.
Attributes¶
No attributes
Python¶
call = substrate.compose_call(
'SafeMode', 'force_extend', {}
)
force_release_deposit¶
Force to release a deposit for an account that entered safe-mode at a given historical block.
This can be called while safe-mode is still entered.
Emits a [Event::DepositReleased
] event on success.
Errors with [Error::Entered
] if safe-mode is entered.
Errors with [Error::NoDeposit
] if the payee has no reserved currency at the
specified block.
Can only be called by the [Config::ForceDepositOrigin
] origin.
Attributes¶
Name | Type |
---|---|
account | T::AccountId |
block | BlockNumberFor<T> |
Python¶
call = substrate.compose_call(
'SafeMode', 'force_release_deposit', {
'account': 'AccountId',
'block': 'u32',
}
)
force_slash_deposit¶
Slash a deposit for an account that entered or extended safe-mode at a given historical block.
This can only be called while safe-mode is entered.
Emits a [Event::DepositSlashed
] event on success.
Errors with [Error::Entered
] if safe-mode is entered.
Can only be called by the [Config::ForceDepositOrigin
] origin.
Attributes¶
Name | Type |
---|---|
account | T::AccountId |
block | BlockNumberFor<T> |
Python¶
call = substrate.compose_call(
'SafeMode', 'force_slash_deposit', {
'account': 'AccountId',
'block': 'u32',
}
)
release_deposit¶
Permissionlessly release a deposit for an account that entered safe-mode at a given historical block.
The call can be completely disabled by setting [Config::ReleaseDelay
] to None
.
This cannot be called while safe-mode is entered and not until
[Config::ReleaseDelay
] blocks have passed since safe-mode was entered.
Emits a [Event::DepositReleased
] event on success.
Errors with [Error::Entered
] if the safe-mode is entered.
Errors with [Error::CannotReleaseYet
] if [Config::ReleaseDelay
] block have not
passed since safe-mode was entered. Errors with [Error::NoDeposit
] if the payee has no
reserved currency at the block specified.
Attributes¶
Name | Type |
---|---|
account | T::AccountId |
block | BlockNumberFor<T> |
Python¶
call = substrate.compose_call(
'SafeMode', 'release_deposit', {
'account': 'AccountId',
'block': 'u32',
}
)
Events¶
CannotDeposit¶
Could not hold funds for entering or extending the safe-mode.
This error comes from the underlying Currency
.
Attributes¶
No attributes
CannotRelease¶
Could not release funds for entering or extending the safe-mode.
This error comes from the underlying Currency
.
Attributes¶
No attributes
DepositPlaced¶
An account reserved funds for either entering or extending the safe-mode.
Attributes¶
Name | Type | Composition |
---|---|---|
account | T::AccountId |
AccountId |
amount | BalanceOf<T> |
u64 |
DepositReleased¶
An account had a reserve released that was reserved.
Attributes¶
Name | Type | Composition |
---|---|---|
account | T::AccountId |
AccountId |
amount | BalanceOf<T> |
u64 |
DepositSlashed¶
An account had reserve slashed that was reserved.
Attributes¶
Name | Type | Composition |
---|---|---|
account | T::AccountId |
AccountId |
amount | BalanceOf<T> |
u64 |
Entered¶
The safe-mode was entered until inclusively this block.
Attributes¶
Name | Type | Composition |
---|---|---|
until | BlockNumberFor<T> |
u32 |
Exited¶
Exited the safe-mode for a specific reason.
Attributes¶
Name | Type | Composition |
---|---|---|
reason | ExitReason |
('Timeout', 'Force') |
Extended¶
The safe-mode was extended until inclusively this block.
Attributes¶
Name | Type | Composition |
---|---|---|
until | BlockNumberFor<T> |
u32 |
Storage functions¶
Deposits¶
Holds the reserve that was taken from an account at a specific block number.
This helps governance to have an overview of outstanding deposits that should be returned or slashed.
Python¶
result = substrate.query(
'SafeMode', 'Deposits', ['AccountId', 'u32']
)
Return value¶
'u64'
EnteredUntil¶
Contains the last block number that the safe-mode will remain entered in.
Set to None
when safe-mode is exited.
Safe-mode is automatically exited when the current block number exceeds this value.
Python¶
result = substrate.query(
'SafeMode', 'EnteredUntil', []
)
Return value¶
'u32'
Constants¶
EnterDepositAmount¶
The amount that will be reserved upon calling [Pallet::enter
].
None
disallows permissionlessly enabling the safe-mode and is a sane default.
Value¶
None
Python¶
constant = substrate.get_constant('SafeMode', 'EnterDepositAmount')
EnterDuration¶
For how many blocks the safe-mode will be entered by [Pallet::enter
].
Value¶
0
Python¶
constant = substrate.get_constant('SafeMode', 'EnterDuration')
ExtendDepositAmount¶
The amount that will be reserved upon calling [Pallet::extend
].
None
disallows permissionlessly extending the safe-mode and is a sane default.
Value¶
None
Python¶
constant = substrate.get_constant('SafeMode', 'ExtendDepositAmount')
ExtendDuration¶
For how many blocks the safe-mode can be extended by each [Pallet::extend
] call.
This does not impose a hard limit as the safe-mode can be extended multiple times.
Value¶
0
Python¶
constant = substrate.get_constant('SafeMode', 'ExtendDuration')
ReleaseDelay¶
The minimal duration a deposit will remain reserved after safe-mode is entered or
extended, unless [Pallet::force_release_deposit
] is successfully called sooner.
Every deposit is tied to a specific activation or extension, thus each deposit can be released independently after the delay for it has passed.
None
disallows permissionlessly releasing the safe-mode deposits and is a sane
default.
Value¶
None
Python¶
constant = substrate.get_constant('SafeMode', 'ReleaseDelay')
Errors¶
AlreadyDeposited¶
The account already has a deposit reserved and can therefore not enter or extend again.
CannotReleaseYet¶
This deposit cannot be released yet.
CurrencyError¶
An error from the underlying Currency
.
Entered¶
The safe-mode is (already or still) entered.
Exited¶
The safe-mode is (already or still) exited.
NoDeposit¶
There is no balance reserved.
NotConfigured¶
This functionality of the pallet is disabled by the configuration.