This glossary defines and explains many common blockchain and Substrate ecosystem concepts and terminology.
Provides a mechanism for adjusting the passing threshold for a referendum based on voter turnout. Adaptive quorum biasing allows for more flexible governance by removing the requirement to have an arbitrary quorum for voting purposes, which create undesirable governance mechanics. Adaptive quorum biasing is implemented in the Democracy pallet. The Democracy pallet provides the interfaces for on-chain bodies such as a collective or individual token holder—to call referenda with positive, negative, or neutral biases.
With a positive turnout bias, the passing threshold decreases as more votes are cast, so that a higher turnout increases the likelihood of a referendum passing. With a negative turnout bias, the passing threshold increases as more votes are cast. Negative turnout bias is also sometimes called a "default carries" position because if there's an apathetic voting body, the referendum passes by default. A neutral turnout bias specifies a simple majority passing threshold.
Used in the context of FRAME, aggregation or pallet aggregation is the process of combining analogous types from multiple runtime modules into a single type. Pallet aggregation allows each module's analogous types to be represented. The call containing the aggregated types is sometimes referred to as an outer call or a call to an outer object. Currently, there are six data types that can be aggregated:
Callfor published functions that can be called with a set of arguments.
Errorfor messages that indicate why a function invocation (
Eventfor pallet-emitted events that describe state changes.
Logfor extensible header items.
Metadatafor information that allows inspection of the above.
Originfor the source of a function invocation (
Voting system where voters can vote for as many candidates as desired. The candidate with the highest overall number of votes wins. With approval voting, it is worth noting the following:
- Voting for all candidates is the same as voting for none.
- It is possible to vote against a single candidate by voting for all other candidates.
The nodes that act as a collective to manage consensus on a blockchain network. In a proof-of-stake blockchain—for example, a blockchain that use the Staking pallet from FRAME—authorities are determined through a token-weighted nomination and voting system.
The terms authorities and validators sometimes seem to refer the same thing. However, validators is a broader term that can include other aspects of chain maintenance such as parachain validation. In general, authorities are a (non-strict) subset of validators and many validators are authorities.
Deterministic consensus protocol where block production is limited to a rotating list of authorities that take turns creating blocks. With authority round (Aura) consensus, the majority of online authorities are assumed to be honest.
Learn more by reading the official wiki article for the Aura consensus algorithm.
The Aura protocol is often used in combination with GRANDPA as a hybrid consensus protocol where Aura is used for block production and short-term probabilistic finality, with deterministic finality provided by GRANDPA.
A block authoring protocol similar to Aura. However, with the blind assignment of blockchain extension (BABE) protocol, authorities win slots based on a verifiable random function (VRF) as opposed to the round-robin selection method. The winning authority can select a chain and submit a new block for it.
Learn more about BABE by referring to its official Web3 Foundation research document.
Describes a single element of a blockchain that cryptographically binds a set of extrinsic data—the body—to a header. Blocks are arranged into a tree through parent pointers. The pointer to a parent block is a hash of the parent and the tree is pruned into a list using a fork-choice rule and an optional finality mechanism.
Describes a distributed network of computers that uses cryptography to allow a group of participants to trustlessly come to consensus on the state of a system as it evolves over time The computers that compose the blockchain network are called nodes.
Defines the ability of a distributed computer network to remain operational if a certain proportion of its nodes or authorities are defective or behaving maliciously. Typically, a distributed network is considered byzantine fault tolerant if it can remain functional with up to one-third of nodes assumed to defective, offline, actively malicious, and acting as part of a coordinated attack.
The loss of a network service due to node failures that exceed the proportion of nodes required to reach consensus.
An early approach to byzantine fault tolerance. pBFT systems tolerate byzantine behavior from up to one-third of participants.
The communication overhead for such systems is
n is the number of nodes (participants) in the system.
In the Substrate ecosystem, these three components are separated from one another, and the term consensus often refers specifically to authorship. In the context of a Substrate node, the term consensus engine describes the node subsystem that is responsible for consensus tasks.
See also hybrid consensus.
An algorithm that ensures that a set of actors—who don't necessarily trust each other—can reach agreement about state as the result of some computation. Because most consensus algorithms assume that up to one-third of the actors or nodes can are byzantine fault tolerant.
Consensus algorithms are generately concerned with ensuring two properties:
- safety indicating that all honest nodes eventually agreed on the state of the chain.
- liveness indicating the ability for the chain to keep making progress.
See also hybrid consensus.
A general term used to describe fundamental cryptographic concepts such as signature schemes and hashing algorithms. Cryptographic primitives are essential to many aspects of the Substrate ecosystem. For example:
- Hashing algorithms produce blocks of hashed data and each block uses the hash generated by the hashing algorithm to reference its parent block.
- Hashing is used to encode state as a trie data structure to facilitate efficient verification.
- Digital signature schemes are used to secure different consensus models such as authorities.
- Cryptographic schemes identify and authenticate the accounts used to perform transactions in the Substrate runtime.
Most often used to refer to an instance of the Collective pallet on Substrate-based networks such as Kusama or Polkadot if the Collective pallet is part of the FRAME-based runtime for the network. A council primarily serves to optimize and balance the more inclusive referendum system.
The means by which the state of a blockchain network is persisted between invocations of the blockchain node application. For information about how the database backend is implemented and used by Substrate-based chains, see Advanced storage.
A mnemonic phrase that is intentionally made public.
All of the well-known development accounts (Alice, Bob, Charlie, Dave, Eve, and Ferdie) are generated from the same dev phrase.
The dev phrase is:
bottom drive obey lake curtain smoke basket hold race lonely fit walk
Many tools in the Substrate ecosystem, such as
subkey, allow users to implicitly specify the dev phrase by only specifying a derivation path such as
An extensible field of the block header that encodes information needed by several actors in a blockchain network including:
- Light clients for chain synchronization.
- Consensus engines for block verification.
- The runtime itself in the case of pre-runtime digests.
The execution of a function with a predefined set of arguments.
In the context of runtime development with FRAME, a dispatch takes pure data—the type is known as
Call by convention—and uses that data to call a published function in a runtime module (pallet) with predefined arguments.
The published functions take one additional parameter, known as
origin, that allows the function to securely determine the provenance of its execution.
A type of erroneous or malicious behavior that involves backing multiple mutually-exclusive options within the consensus mechanism.
A means of recording, for the benefit of the off-chain world, that some particular state transition happened. In the context of FRAME, events are a composable data types that each pallet can individually define. Events in FRAME are implemented as a set of transient storage items that are inspected immediately after a block has executed and reset during block-initialization.
The native executor uses a natively compiled runtime embedded in the node to execute calls. This is a performance optimization that up-to-date nodes can take advantage of.
The WebAssembly executor uses a Wasm binary and a Wasm interpreter to execute calls. The binary is guaranteed to be up-to-date regardless of the version of the blockchain node because it is persisted in the state of the Substrate-based chain.
Data that is external to the blockchain and included in a block. In general, there are two types of extrinsics:
The minimum balance an account is allowed to have in the Balances pallet. Accounts cannot be created with a balance less than the existential deposit amount. If an account balance drops below this amount, the Balances pallet uses a FRAME System API to drop its references to that account. If all of the references to an account are dropped, the account can be reaped.
The part of consensus that makes the ongoing progress of the blockchain irreversible. After a block is finalized, all of the state changes it encapsulates are irreversible without a hard fork. The consensus algorithm must guarantee that finalized blocks never need reverting. However, different consensus algorithms can define different finalization methods.
In a consensus protocol that uses deterministic finality, each block is guaranteed to be the canonical block for that chain when the block is included. Deterministic finality is desirable in situations where the full chain is not available, such as in the case of light clients. GRANDPA is the deterministic finality protocol that is used by the Polkadot Network.
In a consensus protocol that uses probabilistic finality, finality is expressed in terms of a probability, denoted by
p, that a proposed block, denoted by
B, will remain in the canonical chain.
As more blocks are produced on top of
p approaches 1.
In a consensus protocol that uses instant finality, finality is guaranteed immediately upon block production. This type of non-probabilistic consensus tends to use practical byzantine fault tolerance (pBFT) and have expensive communication requirements.
Indicates that there are divergent paths a blockchain might take. If two or more blocks have the same parent but different state, the blockchain cannot continue to progress until the differences are resolved. An unresolved fork would split the blockchain into two separate chains. By resolving divergent forks, you can ensure that only one canonical chain exists.
A Substrate-based blockchain test network that exists for developing and testing the Substrate blockchain development framework. For more information about accessing Substrate networks and flaming fir, see the Polkadot wiki.
Runtime developers interact with FRAME using macros such as the following:
The macros make it easy to define custom pallets and compose pallets to create a working runtime using the
macro to deploy a Substrate-based blockchain.
The convention used in the Substrate codebase is to preface core FRAME modules with
frame_ and the optional pallets with
For example, the preceding macros are all defined in the
frame_support module and all FRAME-based runtimes must include the
frame_support::construct_runtime macro has been used to create a runtime that includes the
frame_system module, optional pallets such as the Balances pallet can be used to extend the core capabilities of the runtime.
A mechanism for specifying the initial state of a blockchain. By convention, this initial state or first block is commonly referred to as the genesis state or genesis block. The genesis configuration for Substrate-based chains is accomplished by way of a chain specification file. The chain specification file makes it easy to use a single Substrate codebase as the foundation for multiple independently-configured chains.
The structure that aggregates the information used to summarize a block. A header consists primarily of cryptographic information that is used by light-clients to get a minimally-secure but very efficient synchronization of the chain.
A blockchain consensus protocol that consists of independent or loosely-coupled mechanisms for block production and finality. Hybrid consensus allows the chain to grow as fast as probabilistic consensus protocols, such as Aura, while maintaining the same level of security as deterministic finality consensus protocols, such as GRANDPA. In general, block production algorithms tend to be faster than finality mechanisms. Making block production separate from block finalization gives Substrate developers greater control of their chain's performance.
A subsystem in Substrate for managing keys for the purpose of producing new blocks.
Kusama is a Substrate-based blockchain that implements a design similar to the Polkadot network. Kusama is a canary network and is referred to as Polkadot's "wild cousin". As a canary network, Kusama is expected to be more stable than a test network like Westend, but not as stable as a production network like Polkadot.
As a canary network, Kusama is controlled by its network participants is intended to be stable enough to encourage meaningful experimentation.
A peer-to-peer networking stack that allows use of many transport mechanisms, including WebSockets (usable in a web browser).
Substrate uses the Rust implementation of the
libp2p networking stack.
A type of blockchain node that does not store the chain state or produce blocks. A light client is capable of verifying cryptographic primitives and exposes a remote procedure call (RPC) server that allows blockchain users to interact with the blockchain network.
A programming language feature that enables developers to write a sequence of instructions that can be named and executed together. The FRAME development environment provides several macros for Rust that you can use to compose a runtime.
A running instance of a blockchain client. Each node is part of the peer-to-peer network that allows blockchain participants to interact with one another. Substrate nodes can fill a number of roles in a blockchain network. For example, the nodes that produce blocks fulfill the validator role for the blockchain. Nodes that run light-clients facilitate scalable interactions in resource-constrained environments like user interfaces or embedded devices.
A FRAME primitive that identifies the source of a dispatched function call into the runtime.
system module defines three built-in origins.
As a pallet developer, you can also define custom origins, such as those defined by the Collective pallet.
The Polkadot network is a blockchain that serves as the central hub of a heterogeneous blockchain network. It serves the role of the relay chain and supports other chains—the parachains—by providing shared infrastructure and security.
Data that can be used to prove that a particular block is finalized.
A consensus mechanism that deters attacks by requiring work on the part of network participants. For example, some proof-of-work systems require participants to use the Ethash function to calculate a hash as a proof of completed work.
The central hub in a heterogenous network of multiple blockchains. Relay chains are blockchains that provide shared infrastructure and security to the other blockchains—the parachains—in the network. In addition to providing consensus capabilities, relay chains also allow parachains to communicate and exchange digital assets without needing to trust one another.
A mechanism for interacting with a computer program. Remote procedure calls enable developers to query the remote computer programs or invoke program logic with parameters they supply. Substrate nodes expose an RPC server on HTTP and WebSocket endpoints.
A democratic voting system that uses a one-vote-per-token method for tallying votes rather than a one-vote-per-head method.
Cryptographically-secure data that persists between blocks and can be used to create new blocks as part of the state transition function. In Substrate-based blockchains, state is stored in a trie data structure that supports the efficient creation of incremental digests. This trie is exposed to the runtime as a simple key/value map where both keys and values can be arbitrary byte arrays.
A definable period—expressed as a range of block numbers—during which a transaction can be included in a block. Transaction eras are used to protect against transaction replay attacks in the event that an account is reaped and its replay-protecting nonce is reset to zero.
A collection of transactions that are not yet included in blocks but have been determined to be valid.
A tagged transaction pool is a transaction pool implementation that allows the runtime to specify whether a given transaction is valid, how it should be prioritized, and how it relates to other transactions in the pool in terms of dependency and mutual-exclusivity. The tagged transaction pool implementation is designed to be extensible and general enough to express both unspent transaction output (UTXO) and account-based transaction models.
A data structure that is used to represent sets of key-value pairs.
The Patricia Merkle trie data structure enables the items in the data set to be stores and retrieved using a cryptographic hash. Because incremental changes to the data set result in a new hash, retrieving data is efficient even if the data set is very large. With this data structure, you can also prove whether the data set includes any particular key-value pair without the access to the entire data set.
A semi-trusted—or untrusted but well-incentivized—actor that helps maintain a blockchain network. In Substrate, validators broadly correspond to the authorities running the consensus system. In Polkadot, validators also manage other duties such as guaranteeing data availability and validating parachain candidate blocks.
An execution architecture that allows for the efficient, platform-neutral expression of deterministic, machine-executable logic. WebAssembly can be compiled from many languages, including the Rust programming language. Substrate-based chains use a WebAssembly binary to provide portable runtimes that can be included as part of the chain's state.