FRAME pallets

The FRAME development environment provides modules—called pallets—and support libraries that you can use, modify, and extend to build the runtime logic to suit the needs of your blockchain.

This section provides an overview of the predefined pallets and links to the Rust API reference documentation, where you can find details about each pallet's interfaces.

System pallets

The FRAME system pallets are integral to the Substrate runtime and provide core functionality that all other pallets depend on.

System pallet nameWhat it's for
frame_benchmarkingContains common runtime patterns for benchmarking and testing purposes.
frame_executiveOrchestrates incoming function calls by sending them to the appropriate pallets in the runtime.
frame_supportProvides Rust macros, types, traits, and modules that generate boilerplate code for the pallet structure when compiled.
frame_systemDefines low-level types for Substrate primitives, storage items, and core functions for the blockchain. All other pallets depend on the frame_system crate.

Functional pallets

The Substrate development framework includes many functional pallets that provide features you might find generally useful as composable components of your blockchain. These functional pallets are prebuilt and freely available to enable the community to share, reuse, and improve the interfaces to address common use cases.

The following table highlights some of the most commonly used pallets available. However, the number of pallets that provide specialized functionality and how they provide that functionality changes frequently. You should check the Rust documentation for the most up-to-date listing of pallets and for details about using them.

Prebuilt pallet nameWhat it's for
pallet_allianceInitializes a collective for community members to join in an effort to establish rules against bad behavior and to provide recognition and influence for teams that contribute to the ecosystem.
pallet_assetsProvides simple and secure methods for dealing with fungible assets.
pallet_atomic_swapEnables sending funds from an origin to a target. A proof is used to allow the target to claim the swap. If the swap is not claimed within a specified duration of time, the sender may cancel it.
pallet_auraExtends the authority round (Aura) consensus model by managing offline reporting.
pallet_authority_discoveryRetrieves the current set of authorities, learns its own authority ID, and signs and verifies messages to and from other authorities.
pallet_authorshipTracks the current author of the block and recent uncles.
pallet_babeExtends BABE consensus by collecting on-chain randomness from VRF outputs and managing epoch transitions.
pallet_balancesProvides functionality for handling accounts and balances.
pallet_bountiesManages rewards for performing specified work or for achieving a specified set of objectives.
pallet_collectiveAllows a set of account IDs to make their collective feelings known through dispatched calls from specialized origins.
pallet_contractsProvides functionality for the runtime to deploy and execute WebAssembly smart contracts.
pallet_contracts_primitivesProvides common definitions that are used by the pallet_contracts crate for smart contracts.
pallet_contracts_rpcProvides node-specific RPC methods for interacting with smart contracts.
pallet_contracts_rpc_runtime_apiEnables a node to use the custom RPC runtime API extension for accessing smart contracts methods.
pallet_democracyProvides a democratic system that handles administration of general stakeholder voting.
pallet_election_provider_multi_phaseEnables an election provider to conduct an election consisting of signed and unsigned phases.
pallet_elections_phragmenProvides an election module based on sequential Phragmén.
pallet_example_basicDemonstrates concepts, APIs, and structures that are applicable for most pallets.
pallet_example_offchain_workerDemonstrates concepts, APIs, and structures that are applicable for most offchain workers.
pallet_example_parallelDemonstrates parallelizing validation of the enlisted participants.
pallet_grandpaExtends the GRANDPA consensus by managing the GRANDPA authority set ready for the native code.
pallet_identityEnables a federated naming system that allows multiple registrars to be added from a specified origin. Registrars can set a fee to provide identity-verification service.
pallet_im_onlineAllows validators to gossip a heartbeat transaction with each new session to signal that the node is online.
pallet_indicesAllocates indices for newly created accounts. An index is a short form of an address.
pallet_lotteryConfigures a lottery that enables network participants to purchase tickets.
pallet_membershipAllows control of membership of a set of AccountIds, useful for managing the membership of a collective.
pallet_multisigEnables multi-signature dispatches.
pallet_nicksDemonstrates simplified account naming on-chain. It makes no effort to create a name hierarchy, be a DNS replacement, or provide reverse lookups.
pallet_offencesTracks reported offences.
pallet_proxyAllows accounts to give permission to other accounts to dispatch types of calls from their signed origin.
pallet_randomness_collective_flipProvides a random function that can be used in tests and generates low-influence random values based on the block hashes from the previous 81 blocks. This pallet is not intended for use in production.
pallet_recoveryProvides a social recovery tool for users to gain access to their accounts if their private key or other authentication mechanism is lost. This pallet enables an account owner to identify trusted parties who can act on the owner's behalf to recover access to an account.
pallet_schedulerExposes capabilities for scheduling dispatches to occur at a specified block number or at a specified period. These scheduled dispatches can be named or anonymous and can be canceled.
pallet_scored_poolMaintains a scored membership pool where the highest scoring entities are made members.
pallet_sessionAllows validators to manage their session keys, provides a function for changing the session length, and handles session rotation.
pallet_societyProvides economic incentives for users to participate and maintain a membership society.
pallet_stakingManages funds that have been staked by network maintainers.
pallet_sudoAllows for a single account—called the sudo key—to execute dispatchable functions that require a Root origin or designate a new account to replace them as the sudo key.
pallet_timestampProvides functionality to get and set the on-chain time.
pallet_transaction_paymentProvides the basic logic to compute pre-dispatch transaction fees.
pallet_treasuryProvides a reserve of funds that can be managed by stakeholders in the system and a structure for making spending proposals from this reserve.
pallet_uniquesProvides methods for managing non-fungible collections and items.
pallet_utilityProvides a stateless helper module for managing dispatches.
pallet_vestingPlaces a linear curve on an account's locked balance. This module ensures that there is a lock in place to prevent the balance to drop below the unvested amount for any reason other than transaction fee payment.

Parachain pallets

In addition to the functional pallets that are generally useful for any blockchain, there are prebuilt pallets that provide features specifically for blockchains that are intended to connect to a relay chain. The following pallets provide features for parachain development.

Prebuilt pallet nameWhat it's for
cumulus-pallet-aura-extProvides AURA consensus for parachains.
pallet-collator-selectionManages collators in a parachain.
cumulus-pallet-dmp-queueImplements a message queue for receiving messages from the relay chain.
cumulus-pallet-parachain-systemProvides basic functionality for cumulus-based parachains.
cumulus-pallet-solo-to-paraEnables migration from a solo chain to a parachain.
cumulus-pallet-xcmAdds support for cross-chain message passing (XCMP) to a parachain.
cumulus-pallet-xcmp-queueEnables the XCMP transport layer to handle both incoming and outgoing message sending and dispatch, queuing, signalling, and backpressure.

Additional information

For detailed information about any pallet, refer to the Rust-generated API documentation or the source code for the individual pallet.