# Strategy

### **Purpose**

The **YieldOptimizer** ensures that users' deposits always generate the maximum possible returns by:

* Continuously comparing APYs (Annual Percentage Yields) across supported protocols.
* Automatically switching users' funds to the most profitable protocol at regular intervals.
* Reducing manual intervention, thus minimizing risk and enhancing efficiency.

### Key Contract and Responsibilities

#### [`YieldOptimizer.sol`](https://github.com/polystream-core/polystream-contracts/blob/main/src/Strategy/YieldOptimizer.sol)

* Manages asset allocation across lending protocols to achieve the highest possible returns.

***

**`optimizeYield()`**

Executes the yield optimization routine. Intended to run automatically via Chainlink Automation at each epoch's end.

**Operational Steps:**

* Retrieves the current active protocol’s APY.
* Iterates through all registered protocols to identify a protocol offering a higher APY.
* Executes fund withdrawal from the previously active protocol, if a better APY is identified.
* Sets the new protocol as active within the `ProtocolRegistry`.
* Immediately reinvests funds into the newly selected protocol.

**Events**

* **`OptimizedYield(oldProtocolId, newProtocolId, amount)`**:\
  Triggered whenever funds are moved to a new protocol for improved returns.
