# Collateral Filters

Pools exist in a variety of configurations, primarily differing in the type of collateral filter used. The collateral filter is responsible for validating NFT collateral when originating a loan.

Currently, four basic collateral filters exist: the [`CollectionCollateralFilter`](https://github.com/metastreet-labs/metastreet-contracts-v2/blob/master/contracts/filters/CollectionCollateralFilter.sol) for accepting an entire collection (all token IDs), the [`RangedCollectionCollateralFilter`](https://github.com/metastreet-labs/metastreet-contracts-v2/blob/master/contracts/filters/RangedCollectionCollateralFilter.sol) for accepting a range of token IDs within a collection, and the [`SetCollectionCollateralFilter`](https://github.com/metastreet-labs/metastreet-contracts-v2/blob/master/contracts/filters/SetCollectionCollateralFilter.sol) for accepting a small set of token IDs within a collection, and the [`MerkleCollectionCollateralFilter`](https://github.com/metastreet-labs/metastreet-contracts-v2/blob/master/contracts/filters/MerkleCollectionCollateralFilter.sol) for accepting a larger set of token IDs within a collection via a merkle proof. When a new Pool is created, it can configure one of these four variants of collateral filter to specify the NFT collateral allowed for lending.

Collateral may also be first wrapped by a supported [Collateral Wrapper](https://docs.metastreet.xyz/technical-overview/protocol-design/collateral-wrappers) (e.g. for bundles). The collateral filter is applied to the enumerated elements of the wrapped collateral when originating a loan.

Collateral filters are implemented with the internal [`CollateralFilter`](https://github.com/metastreet-labs/metastreet-contracts-v2/blob/master/contracts/filters/CollateralFilter.sol) abstract contract API.
