# Managers as oracles

### Background: When would managers issue or redeem?&#x20;

Managers issue new `longZCB` when they want to gain exposure to the lending pool. In doing so, they supply capital to the lending pool from the vault.&#x20;

Managers redeem `longZCB` when they want to offload risk from the lending pool. In doing so, they withdraw capital from the lending pool to the vault, receiving their collateral + profit/loss .&#x20;

### Why Managers As Oracles?

There are no reliable oracles for long-tail assets. For ones that do exist, they are easily manipulated. Instead, using RAMM's managers as oracles is a straightforward mechanism for pricing collaterals in the context of lending.&#x20;

A third-party oracle is not a necessity as the managers themselves would be responsible for accurately pricing the risk of the collaterals. At a fundamental level, a manager would not supply liquidity to a pool, and would instead withdraw from the pool, when the `maxBorrowableAmount` per collateral exceeds their perceived price of the collateral. The `maxBorrowableAmount` would dynamically adjust as a function of the amount of `longZCB` issued/redeemed. &#x20;

{% hint style="info" %}
**Summary**: The mechanism outlined below simply adjusts the `maxBorrowableAmount` per unit  collateral based on simple supply-demand dynamics.&#x20;

If more capital is supplied compared to the amount borrowed(low utilization), supply>demand which  slowly lowers the price(`maxBorrowableAmount`) of the collateral.&#x20;

If more capital is withdrawn compared to the amount borrowed(high utilization), supply\<demand which slowly increases the price(`maxBorrowableAmount)` of the collateral.&#x20;

{% endhint %}

### Dynamic Max Borrowable Amount

The `maxBorrowableAmount` is a dynamically adjusted parameter and determines how much unit vault's underlying can the borrower borrow per unit collateral collateralized. For example, if `maxBorrowableAmount` is 500 for a USDC vault and with ETH as collateral, a borrower can borrow 500 USDC per ETH deposited. &#x20;

> The `maxBorrowableAmount` parameter represents a collateral's borrowing power 'agreed' by the managers. It replaces a third party price feed. `maxBorrowableAmount` is akin to an implied  'price' of the collateral as determined by the managers' collective **`longZCB`** demand.&#x20;

During the lifetime of a lending pool, `maxBorrowableAmount` will adjust to account for the collateral's value as perceived by the managers. Recall that whenever a manager issues `longZCB` the protocol supplies capital to the instrument, and whenever a manager redeems `longZCB` the protocol withdraws capital from the instrument. As a result, all else being equal,  there is a bijective relationship between `longZCB` issuance and the utilization rate.&#x20;

We can then create a relationship between `maxBorrowableAmount` and the utilization rate(or equivalently, how much `longZCB` at time t u\_t, based on the central principle that a low utilization rate means both the managers(supplier) and borrowers(demander) deem `maxBorrowableAmount` low, and vice versa.&#x20;

{% hint style="info" %}

1. Manager is bullish(bearish) with the given collaterals and `maxBorrowableAmount`
2. Manager issue(redeems) `longZCB`, thereby supplying(withdrawing) to(from) the lending pool.&#x20;
3. Utilization rate goes down(up).
   {% endhint %}

For the following parameters, we can determine B\_T, or the `maxBorrowableAmount` for a lending pool at time T, as a function of all recorded utilization rate(urate) until time T.&#x20;

$$
\hat{B} := \text{initial} \ \texttt{maxBorrowableAmount} \ I\_t = \texttt{maxBorrowableAmount} \ \text{percentage increment at time T}\ u\_u:=upper threshold \ urate \u\_l:=lower threshold \ urate
$$

$$
I\_t = \begin{cases}
x& \text{if } urate \geq u\_u\\
-x & \text{if } urate\leq u\_l
\ 0& \text{otherwise}    \end{cases}
$$

$$
0\leq x \leq 1
$$

$$
B\_T = \hat{B}\prod\_{i=1}^T(1- I\_i)
$$

In words, `maxBorrowableAmount` will decrement by x if the urate is above a threshold(when managers redeem and thus withdraw from the pool), and increment by x if the urate is below a threshold(when managers issue and thus supply to the pool).&#x20;

This relationship gives rise to some desirable properties

> 1. Attack reslient, as borrowable amount increases in increments per unit time. &#x20;
> 2. When the pool is overdrawn, if the managers *don't* issue **`longZCB`** given the higher APR from a higher urate, `maxBorrowableAmount` will decrease.&#x20;
> 3. When the pool is underdrawn, if the managers *don't* redeem **`longZCB`** given the lower APR from a lower urate, `maxBorrowableAmount` will increase.&#x20;
> 4. When the managers' perceived value of collateral decreases, they redeem **`longZCB`**, which will increase `maxBorrowableAmount` over time.&#x20;
> 5. When the managers' perceived value of collateral increases, they issue **`longZCB`**, which will decrease `maxBorrowableAmount` over time.&#x20;
> 6. Overall, the process does not increase the action space for managers. They simply issue/redeem **`longZCB`** when they are bullish or bearish.&#x20;

<figure><img src="/files/71gLumcVBgbKpSRB7rlH" alt=""><figcaption></figcaption></figure>

The dynamic is shown in the graph above. When managers *redeem* **`longZCB`** and utilization rate exceeds the upper threshold U\_u, `maxBorrowableAmount` will decrease. When managers issue **`longZCB`** and utilization rate exceeds the lower threshold U\_u, `maxBorrowableAmount` will increase. The more time spent under(over) the threshold, the more `maxBorrowableAmount` will change.&#x20;

###


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://limitless.gitbook.io/rammlend/products/universal-lending-pool/managers-as-oracles.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
