With sudoAMM v2, royalties are enforced on liquidity pools at the contract level. Royalties are automatically enabled for collections implementing the ERC2981 royalty standard as well as collections created with supported marketplaces such as Manifold/Foundation, Rarible, SuperRare, or Zora (limited functionality).

Additionally, creators can use the shared Royalty Registry deployed at royaltyregistry.eth to manually override royalties, e.g. for older collections which do not implement ERC2981.

Royalty Engine

The RoyaltyEngine contract determines the provisional value of royalties due for a swap of given value and the address that should receive them. It is a fork of the Royalty Engine created by Manifold as part of the Royalty Registry initiative.

If a collection implements ERC2981, the RoyaltyEngine retrieves royalty information from the collection contract itself. Failing this, the RoyaltyEngine searches for royalty information against popular marketplace specifications:

  • Manifold
  • Rarible V1 and V2
  • Foundation
  • SuperRare
  • Zora
  • ArtBlocks
  • KnownOriginV2

The RoyaltyEngine also searches for entries in the shared Royalty Registry at royaltyregistry.eth, where creators can manually override royalties.

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.