# PoolAddressesProvider

The `PoolAddressesProvider` contract is the main registry of addresses that are part of or connected to the Fathom protocol, including permissioned roles. It acts as a factory of proxies and an admin of those proxies, with the right to change their implementations. The contract is owned by the Fathom Governance.

### **Storage Variables**

* **\_marketId**: The identifier of the Fathom Market.
* **\_addresses**: A mapping of registered addresses (`bytes32 identifier` => `address registeredAddress`).

### **Constants**

* **POOL**: The identifier for the pool address.
* **POOL\_CONFIGURATOR**: The identifier for the pool configurator address.
* **PRICE\_ORACLE**: The identifier for the price oracle address.
* **ACL\_MANAGER**: The identifier for the ACL manager address.
* **ACL\_ADMIN**: The identifier for the ACL admin address.
* **PRICE\_ORACLE\_SENTINEL**: The identifier for the price oracle sentinel address.
* **DATA\_PROVIDER**: The identifier for the data provider address.

### Functions

### **Getters**

* **getMarketId()**: Returns the identifier of the Fathom Market.
* **getAddress(bytes32 id)**: Returns the registered address associated with the given identifier.
* **getPool()**: Returns the address of the pool.
* **getPoolConfigurator()**: Returns the address of the pool configurator.
* **getPriceOracle()**: Returns the address of the price oracle.
* **getACLManager()**: Returns the address of the ACL manager.
* **getACLAdmin()**: Returns the address of the ACL admin.
* **getPriceOracleSentinel()**: Returns the address of the price oracle sentinel.
* **getPoolDataProvider()**: Returns the address of the pool data provider.

### **Setters**

* **setMarketId(string memory newMarketId)**: Sets a new market identifier. Callable only by the owner.
* **setAddress(bytes32 id, address newAddress)**: Registers a new address with the given identifier. Callable only by the owner.
* **setAddressAsProxy(bytes32 id, address newImplementationAddress)**: Updates the implementation address of a proxy. Callable only by the owner.
* **setPoolImpl(address newPoolImpl)**: Sets a new pool implementation. Callable only by the owner.
* **setPoolConfiguratorImpl(address newPoolConfiguratorImpl)**: Sets a new pool configurator implementation. Callable only by the owner.
* **setPriceOracle(address newPriceOracle)**: Sets a new price oracle address. Callable only by the owner.
* **setACLManager(address newAclManager)**: Sets a new ACL manager address. Callable only by the owner.
* **setACLAdmin(address newAclAdmin)**: Sets a new ACL admin address. Callable only by the owner.
* **setPriceOracleSentinel(address newPriceOracleSentinel)**: Sets a new price oracle sentinel address. Callable only by the owner.
* **setPoolDataProvider(address newDataProvider)**: Sets a new pool data provider address. Callable only by the owner.

### **Events**

* **MarketIdSet(string indexed oldMarketId, string indexed newMarketId)**: Emitted when the market identifier is updated.
* **AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress)**: Emitted when an address is registered or updated.
* **AddressSetAsProxy(bytes32 indexed id, address indexed proxyAddress, address indexed oldImplementationAddress, address newImplementationAddress)**: Emitted when a proxy address is set or updated.
* **PoolUpdated(address indexed oldPoolImpl, address indexed newPoolImpl)**: Emitted when the pool implementation is updated.
* **PoolConfiguratorUpdated(address indexed oldPoolConfiguratorImpl, address indexed newPoolConfiguratorImpl)**: Emitted when the pool configurator implementation is updated.
* **PriceOracleUpdated(address indexed oldPriceOracle, address indexed newPriceOracle)**: Emitted when the price oracle address is updated.
* **ACLManagerUpdated(address indexed oldAclManager, address indexed newAclManager)**: Emitted when the ACL manager address is updated.
* **ACLAdminUpdated(address indexed oldAclAdmin, address indexed newAclAdmin)**: Emitted when the ACL admin address is updated.
* **PriceOracleSentinelUpdated(address indexed oldPriceOracleSentinel, address indexed newPriceOracleSentinel)**: Emitted when the price oracle sentinel address is updated.
* **PoolDataProviderUpdated(address indexed oldDataProvider, address indexed newDataProvider)**: Emitted when the pool data provider address is updated.
* **ProxyCreated(bytes32 indexed id, address indexed proxyAddress, address indexed implementationAddress)**: Emitted when a new proxy is created.
