# LibMagpieRouter

This library declared struct and a library used by MagpieAggregator. This structure and library design help organize data and provide access to the app's storage, allowing other parts of the system to fetch essential data or settings as needed.

### CurveSettings:

```solidity
struct CurveSettings {
    address mainRegistry;
    address cryptoRegistry;
    address cryptoFactory;
}
```

<table><thead><tr><th>Field</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><p></p><pre class="language-solidity"><code class="lang-solidity">mainRegistry
</code></pre></td><td><p></p><pre class="language-solidity"><code class="lang-solidity">address
</code></pre></td><td>Address for the main Curve registry.</td></tr><tr><td><p></p><pre class="language-solidity"><code class="lang-solidity">cryptoRegistry
</code></pre></td><td><p></p><pre class="language-solidity"><code class="lang-solidity">address
</code></pre></td><td>Address for the crypto Curve registry.</td></tr><tr><td><p></p><pre class="language-solidity"><code class="lang-solidity">cryptoFactory
</code></pre></td><td><p></p><pre class="language-solidity"><code class="lang-solidity">address
</code></pre></td><td>Address for the crypto Curve factory.</td></tr></tbody></table>

### Amm

```solidity
struct Amm {
    uint8 protocolId;
    bytes4 selector;
    address addr;
}
```

<table><thead><tr><th>Field</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><p></p><pre class="language-solidity"><code class="lang-solidity">protocolId
</code></pre></td><td><p></p><pre class="language-solidity"><code class="lang-solidity">uint8
</code></pre></td><td>An identifier for the AMM protocol.</td></tr><tr><td><p></p><pre class="language-solidity"><code class="lang-solidity">selector
</code></pre></td><td><p></p><pre class="language-solidity"><code class="lang-solidity">bytes4
</code></pre></td><td>A function selector.</td></tr><tr><td><p></p><pre class="language-solidity"><code class="lang-solidity">addr
</code></pre></td><td><p></p><pre class="language-solidity"><code class="lang-solidity">address
</code></pre></td><td>The address where this AMM resides.</td></tr></tbody></table>

### AppStorage

```solidity
struct AppStorage {
    address weth;
    address magpieAggregatorAddress;
    mapping(uint16 => Amm) amms;
    CurveSettings curveSettings;
}
```

<table><thead><tr><th>Field</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><p></p><pre class="language-solidity"><code class="lang-solidity">weth
</code></pre></td><td><p></p><pre class="language-solidity"><code class="lang-solidity">address
</code></pre></td><td>The address of the Wrapped Ether contract.</td></tr><tr><td><p></p><pre class="language-solidity"><code class="lang-solidity">magpieAggregatorAddress
</code></pre></td><td><p></p><pre class="language-solidity"><code class="lang-solidity">address
</code></pre></td><td>Address of the Magpie Aggregator contract.</td></tr><tr><td><p></p><pre class="language-solidity"><code class="lang-solidity">amms
</code></pre></td><td><p></p><pre class="language-solidity"><code class="lang-solidity">mapping(uint16 => Amm)
</code></pre></td><td>A mapping of different AMMs, indexed by a <code>uint16</code> value.</td></tr><tr><td><p></p><pre class="language-solidity"><code class="lang-solidity">curveSettings
</code></pre></td><td><p></p><pre class="language-solidity"><code class="lang-solidity">CurveSettings
</code></pre></td><td><p></p><pre class="language-solidity"><code class="lang-solidity">struct CurveSettings {
    address mainRegistry;
    address cryptoRegistry;
    address cryptoFactory;
}
</code></pre></td></tr></tbody></table>


---

# 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://docs.fly.trade/developers/deprecated-magpie-contracts/magpieaggregator-diamond-proxy/libraries/libmagpierouter.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.
