# Architecture Overview

## Core Components

Nomial V1 has three main components:

1. **Smart Contracts:** Contain logic that controls collateral and pooled capital
2. **Validators:** Off-chain clients that control all on-chain operations in the protocol
3. **API:** Off-chain service that facilitates interactions with the protocol

## Smart Contracts

Core contracts:

* CollateralPool
  * Accepts collateral deposits of any ERC20 token from solvers
  * Implements a time-locked withdrawal mechanism to allow time for liquidations
  * Allows Validators to liquidate solver balances if necessary
* InventoryPool
  * Stores LP capital.
  * Borrowers (e.g., solvers) borrow from instances of InventoryPool
  * Each pool instance supports a single ERC20 token

## Validators

Validators are responsible for triggering collateral liquidations and granting borrow permissions for inventory access. A quorum of Validators can:

* Liquidate solver balances and pending withdrawals in the CollateralPool
* Grant permission to borrow from InventoryPools (based on collateral and outstanding positions)
* Update parameters such as withdrawal periods and interest rates

Learn more about validators: [Security Model](https://docs.nomial.io/security/security-model-overview).

## API

The API provides:

* An endpoint for solvers to request validator approval for a borrow transaction
* Transaction data for interactions with the smart contracts
* Read-only state info about validators, borrowers, and pools.
