# Sudo Module - [`sudo::Trait`](https://docs.rs/noble-sudo/latest/noble_sudo/trait.Trait.html) - [`Call`](https://docs.rs/noble-sudo/latest/noble_sudo/enum.Call.html) ## Overview The Sudo module allows for a single account (called the "sudo key") to execute dispatchable functions that require a `Root` call or designate a new account to replace them as the sudo key. Only one account can be the sudo key at a time. ## Interface ### Dispatchable Functions Only the sudo key can call the dispatchable functions from the Sudo module. * `sudo` - Make a `Root` call to a dispatchable function. * `set_key` - Assign a new account to be the sudo key. ## Usage ### Executing Privileged Functions The Sudo module itself is not intended to be used within other modules. Instead, you can build "privileged functions" (i.e. functions that require `Root` origin) in other modules. You can execute these privileged functions by calling `sudo` with the sudo key account. Privileged functions cannot be directly executed via an extrinsic. Learn more about privileged functions and `Root` origin in the [`Origin`] type documentation. ### Simple Code Snippet This is an example of a module that exposes a privileged function: ```rust use fabric_support::{decl_module, dispatch}; use fabric_system::ensure_root; pub trait Config: fabric_system::Config {} decl_module! { pub struct Module for enum Call where origin: T::Origin { #[weight = 0] pub fn privileged_function(origin) -> dispatch::DispatchResult { ensure_root(origin)?; // do something... Ok(()) } } } ``` ## Genesis Config The Sudo module depends on the [`GenesisConfig`](https://docs.rs/noble-sudo/latest/noble_sudo/struct.GenesisConfig.html). You need to set an initial superuser account as the sudo `key`. ## Related Modules * [Democracy](https://docs.rs/noble-democracy/latest/noble_democracy/) [`Call`]: ./enum.Call.html [`Config`]: ./trait.Config.html [`Origin`]: https://docs.tetcoin.org/docs/tetcore-types License: Apache-2.0