############################### Features ############################### Features implement the core feature set of the 0x Protocol. They are trusted with user allowances and permissioned by the `0x Governor <./governor.html>`_. Features are run in the context of the `Proxy <../proxy.html>`_, via a ``delegatecall``. Below is a catalog of Features. .. table:: :widths: 20 60 20 +----------------------------+----------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | **Feature** | **Description** | **Resources** | +----------------------------+----------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | BootstrapFeature | Bootstraps the entire system. | `Code `__; `Usage <./proxy.html#bootstrapping>`__ | +----------------------------+----------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | LiquidityProviderFeature | Connects the system to Pluggable Liquidity (PLP). | `Code `__; `Usage <../advanced/plp.html#trading-with-a-liquidity-provider>`__ | +----------------------------+----------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | MetaTransactionsFeature | Executes Meta-Transactions. | `Code `__; `Usage <../advanced/mtx.html>`__ | +----------------------------+----------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | NativeLiquidityFeature | Functions for native 0x liquidity (see `Orders <../basics/orders.html>`_). | `Code `__; `Usage <../basics/functions.html>`__ | +----------------------------+----------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | OwnableFeature | An implementation of Ownable that is compatible with the delegate-call proxy pattern. | `Code `__; `Usage <./architecture/proxy.html#ownership>`__ | +----------------------------+----------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | SignatureValidationFeature | *This feature is deprecated. Its code will be removed after the contract is decommissioned.* | `Code `__ | +----------------------------+----------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | SimpleFunctionRegistry | Implements the registry of functions/features available in the system. | `Code `__; `Usage <./proxy.html#function-registry>`__ | +----------------------------+----------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | TokenSpenderFeature | *This feature is deprecated. Its code will be removed after the contract is decommissioned.* | `Code `__ | +----------------------------+----------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | TransformERC20Feature | Executes `Transformers <./transformers.html>`_ to aggregate liquidity and operate on ERC20 tokens. | `Code `__; `Usage <../advanced/erc20_transformations.html>`__ | +----------------------------+----------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | UniswapFeature | A highly-optimized UniswapV2 router; used to source liquidity from Uniswap. | `Code `__; `Usage <../advanced/uniswap.html>`__ | +----------------------------+----------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ Implementing a Feature ====================== The only requirement is that the Feature implements the interface in `IFeature `_. Review the `Proxy Section <./proxy.html>`_ for details on how to write a smart contract that is compatible with our architecture (ex, how to properly manage state). .. code-block:: solidity /// @dev Basic interface for a feature contract. interface IFeature { // solhint-disable func-name-mixedcase /// @dev The name of this feature set. function FEATURE_NAME() external view returns (string memory name); /// @dev The version of this feature set. function FEATURE_VERSION() external view returns (uint256 version); }