diff --git a/srml/executive/src/lib.rs b/srml/executive/src/lib.rs
index 4c5595dc5e5ca..a33458a910f61 100644
--- a/srml/executive/src/lib.rs
+++ b/srml/executive/src/lib.rs
@@ -14,7 +14,45 @@
// You should have received a copy of the GNU General Public License
// along with Substrate. If not, see .
-//! Executive: Handles all of the top-level stuff; essentially just executing blocks/extrinsics.
+//! # Executive Module
+//!
+//! The Executive module acts as the orchestration layer for the runtime. It dispatches incoming
+//! extrinsic calls to the respective modules in the runtime.
+//!
+//! ## Overview
+//!
+//! The executive module is not a typical SRML module providing functionality around a specific feature.
+//! It is a cross-cutting framework component for the SRML. It works in conjunction with the
+//! [SRML System module](../srml_system/index.html) to perform these cross-cutting functions.
+//!
+//! The Executive module provides functions to:
+//!
+//! - Check transaction validity.
+//! - Initialize a block.
+//! - Apply extrinsics.
+//! - Execute a block.
+//! - Finalize a block.
+//! - Start an off-chain worker.
+//!
+//! ### Implementations
+//!
+//! The Executive module provides the following implementations:
+//!
+//! - `ExecuteBlock`: Trait that can be used to execute a block.
+//! - `Executive`: Type that can be used to make the SRML available from the runtime.
+//!
+//! ## Usage
+//!
+//! The default Substrate node template declares the [`Executive`](./struct.Executive.html) type in its library.
+//!
+//! ### Example
+//!
+//! `Executive` type declaration from the node template.
+//!
+//! ```ignore
+//! /// Executive: handles dispatch to the various modules.
+//! pub type Executive = executive::Executive;
+//! ```
#![cfg_attr(not(feature = "std"), no_std)]
@@ -48,9 +86,9 @@ mod internal {
}
}
-/// Something that can be used to execute a block.
+/// Trait that can be used to execute a block.
pub trait ExecuteBlock {
- /// Actually execute all transitioning for `block`.
+ /// Actually execute all transitions for `block`.
fn execute_block(block: Block);
}
@@ -100,20 +138,20 @@ impl<
fn initial_checks(block: &Block) {
let header = block.header();
- // check parent_hash is correct.
+ // Check that `parent_hash` is correct.
let n = header.number().clone();
assert!(
n > System::BlockNumber::zero() && >::block_hash(n - System::BlockNumber::one()) == *header.parent_hash(),
"Parent hash should be valid."
);
- // check transaction trie root represents the transactions.
+ // Check that transaction trie root represents the transactions.
let xts_root = extrinsics_root::(&block.extrinsics());
header.extrinsics_root().check_equal(&xts_root);
assert!(header.extrinsics_root() == &xts_root, "Transaction trie root must be valid.");
}
- /// Actually execute all transitioning for `block`.
+ /// Actually execute all transitions for `block`.
pub fn execute_block(block: Block) {
Self::initialize_block(block.header());
@@ -128,11 +166,11 @@ impl<
Self::final_checks(&header);
}
- /// Execute given extrinsics and take care of post-extrinsics book-keeping
+ /// Execute given extrinsics and take care of post-extrinsics book-keeping.
fn execute_extrinsics_with_book_keeping(extrinsics: Vec, block_number: NumberFor) {
extrinsics.into_iter().for_each(Self::apply_extrinsic_no_note);
- // post-extrinsics book-keeping.
+ // post-extrinsics book-keeping
>::note_finished_extrinsics();
>::on_finalize(block_number);
}
@@ -143,7 +181,7 @@ impl<
>::note_finished_extrinsics();
>::on_finalize(>::block_number());
- // setup extrinsics
+ // set up extrinsics
>::derive_extrinsics();
>::finalize()
}
@@ -180,7 +218,7 @@ impl<
/// Actually apply an extrinsic given its `encoded_len`; this doesn't note its hash.
fn apply_extrinsic_with_len(uxt: Block::Extrinsic, encoded_len: usize, to_note: Option>) -> result::Result {
- // Verify the signature is good.
+ // Verify that the signature is good.
let xt = uxt.check(&Default::default()).map_err(internal::ApplyError::BadSignature)?;
// Check the size of the block if that extrinsic is applied.
@@ -195,7 +233,7 @@ impl<
if index < &expected_index { internal::ApplyError::Stale } else { internal::ApplyError::Future }
) }
- // pay any fees.
+ // pay any fees
Payment::make_payment(sender, encoded_len).map_err(|_| internal::ApplyError::CantPay)?;
// AUDIT: Under no circumstances may this function panic from here onwards.
@@ -204,13 +242,13 @@ impl<
>::inc_account_nonce(sender);
}
- // make sure to `note_extrinsic` only after we know it's going to be executed
+ // Make sure to `note_extrinsic` only after we know it's going to be executed
// to prevent it from leaking in storage.
if let Some(encoded) = to_note {
>::note_extrinsic(encoded);
}
- // decode parameters and dispatch
+ // Decode parameters and dispatch
let (f, s) = xt.deconstruct();
let r = f.dispatch(s.into());
>::note_applied_extrinsic(&r, encoded_len as u32);
@@ -222,10 +260,10 @@ impl<
}
fn final_checks(header: &System::Header) {
- // remove temporaries.
+ // remove temporaries
let new_header = >::finalize();
- // check digest.
+ // check digest
assert_eq!(
header.digest().logs().len(),
new_header.digest().logs().len(),
@@ -246,7 +284,7 @@ impl<
/// Check a given transaction for validity. This doesn't execute any
/// side-effects; it merely checks whether the transaction would panic if it were included or not.
///
- /// Changes made to the storage should be discarded.
+ /// Changes made to storage should be discarded.
pub fn validate_transaction(uxt: Block::Extrinsic) -> TransactionValidity {
// Note errors > 0 are from ApplyError
const UNKNOWN_ERROR: i8 = -127;
@@ -267,7 +305,7 @@ impl<
};
if let (Some(sender), Some(index)) = (xt.sender(), xt.index()) {
- // pay any fees.
+ // pay any fees
if Payment::make_payment(sender, encoded_len).is_err() {
return TransactionValidity::Invalid(ApplyError::CantPay as i8)
}