> For the complete documentation index, see [llms.txt](https://docs.fly.trade/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.fly.trade/flycn/developers/deprecated-magpie-contracts/magpieaggregator-diamond-proxy/libraries/libmagpierouter.md).

# 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>
