# Royalties

Royalties are enforced on liquidity pools at the contract level. Royalties are automatically enabled for collections implementing the [ERC2981 royalty standard](https://eips.ethereum.org/EIPS/eip-2981).

## Royalty Engine

The `RoyaltyEngine` contract is a fork of the [Royalty Engine](https://github.com/manifoldxyz/royalty-registry-solidity/blob/main/contracts/RoyaltyEngineV1.sol) created by Manifold as part of the Royalty Registry initiative. This contract determines the provisional value of royalties due for a swap of given `value` and the address that should receive them. If a collection implements ERC2981, the `RoyaltyEngine` retrieves royalty information from the collection contract itself.

Royalty information returned from the engine is used in the `_calculateRoyalties` function on pair contracts, which is called internally by all swap methods, unless:

* The royalty exceeds the sale price, in which case no royalty is applied.
* A Setting is in place for the pool.

When a Setting is in place for a given pair, the `_calculateRoyalties` function will overwrite the royalty *value* returned by the `RoyaltyEngine` using the `getFeeSplitBps` view on the Setting contract.
