# What does Datnoid do?

Datnoid offers a fair, secure, and transparent alternative, ensuring meme coins launch equitably while benefiting both creators and investors.

<figure><img src="https://3004144969-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfhXylzUQTxezfoTINvEG%2Fuploads%2F8gGypr5Ixcyw91hjfU4D%2Fimage.png?alt=media&amp;token=fa8a7d7d-5b79-48d4-9e9b-2e9cd6581647" alt=""><figcaption></figcaption></figure>

### Web3 is too complex

There's too many tabs to keep open, too many discords, too many telegrams, too many tools to juggle. Contract addresses are stressful.

### Launches are not fair

The elite have too much of an advantage in knowledge over newcomers. Lets even the playing field by providing the tools and information you need.

### No more scams

Preorders prevent bots from stealing value from users, and all our contracts are vetted so there's no potential for shady contracts on our platform.&#x20;


# Our Mission

We want to build the tools to make web3 a fair place for everyone. There's too many steps and too much hidden alpha that the elite abuse to extract value from web3 newcomers. Lets change that.

***

## Why Launch Your Meme Coin on Datnoid?

✅No rug pulls, no bot abuse\
✅ Fair, transparent price discovery\
✅ Scheduled launches—no stealth snipes\
✅ Multiple fair launch methods: RS & FCFS\
✅ Unified liquidity for seamless trading\
✅ Best platform for meme coin creators and buyers

Datnoid isn’t just another DEX—it’s the future of fair-launch meme coins. If you’re serious about building a meme coin that’s trusted and fairly distributed, Datnoid is your best option.

<br>


# $100M Memecoin Fund

{% embed url="<https://x.com/avax/status/1740538202346381605>" %}
TLDR, LFG
{% endembed %}

It's official, The Avalanche Foundation will pump memecoins that meet their requirements. Every token launched on Datnoid is eligible and we even show you the metrics on how well your token is performing. It doesn't cost anything to launch a token (for a limited time), and you don't have to supply any liquidity. What are you waiting for?&#x20;


# Fair Launch System

Anti-bot technology

<figure><img src="https://3004144969-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfhXylzUQTxezfoTINvEG%2Fuploads%2FaqQNhaoLgJeu5fqascOt%2FUntitled%20Diagram.drawio%20(2).drawio%20(1).png?alt=media&amp;token=57a03b36-b121-4cee-9127-b9c4eb9283a8" alt=""><figcaption><p>Only on Datnoid</p></figcaption></figure>

### 📅 1. Random Selection (RS) – The Fairest Method

* The best way to launch a meme token fairly!
* Launch date is set by the creator, visible to all, so there are no surprise launches.
* Users place pre-orders before the launch date with AVAX or USDC.
* Pre-orders are randomized—whichever wallet is selected first gets the best price.
* Avoids insider sniping and ensures fairness in distribution.

### ⚡ 2. First Come, First Serve (FCFS) – For Early Adopters

* Launch date is set by the creator, ensuring transparency.
* Pre-orders are executed sequentially—whoever places their order first gets the best price.
* Rewards early participation but still maintains a structured launch.

### 🚀 3. Skip the Wait – Instant Launch - For Speed

* A token can be instantly launched like on other platforms without a launch date.
* No pre-order process; anyone can buy immediately.
* Best for quick launches.


# GigaChad DatnoidLP

The most lucrative DEX for liquidity providers

<figure><img src="https://3004144969-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfhXylzUQTxezfoTINvEG%2Fuploads%2F8K7Ms6aCvQyp4BryE3jf%2Fimage.png?alt=media&amp;token=55c33fd6-c1b8-44dc-9146-94cfb3d4ce50" alt=""><figcaption><p>One Gigachad token to rule them all. </p></figcaption></figure>

#### Profitability

To make money as a LP on most DEXes, you have to know which pairs are going to have the most volume.&#x20;

You have to swap your assets in order to be able to provide liquidity for that pair. (fees)\
\
Then you need to specify a price bin to earn the most profits. (headache)\
If you choose incorrectly, you are not making as much, and sometimes you make nothing.\
Some people split their liquidity into several bins to avoid making nothing. This cuts your profits even further because now your active bins have less liquidity.\
\
Then you have to constantly monitor your performance and be ready to remove your assets and swap the profits. (fees)\
\
Then you have to rinse and repeat for all new token pairs.

## OR

You can simply stake any single asset like AVAX/USDC/WETH.e and you get the Datnoid LP token. Half of the fee amount from each swap is distributed to all LP holders.

Our LP token can be unstaked for any asset in the pool. Stake some Memecoin, and unstake it for USDC, or vice versa. \
\
Passively watch the value of your LP token grow.&#x20;


# Unified Liquidity Pool

Datnoid isn’t just about launches—it redefines liquidity and trading efficiency.

<figure><img src="https://3004144969-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfhXylzUQTxezfoTINvEG%2Fuploads%2FjKWs2ADhU4zQstlNXI2r%2Fimage.png?alt=media&amp;token=aedb9764-8d76-4a41-8b57-0cef165b392f" alt=""><figcaption><p>The future is now, old man</p></figcaption></figure>

**🔄 No fragmented liquidity** – Unlike Uniswap, where liquidity is locked in pairs, Datnoid’s pool is unified, allowing swaps between any token in the ecosystem.

**📈 Immediate trading with multiple assets –**

* Tokens don’t start at near-zero prices (Ex: \~$0.0000006) like on other platforms.The newly launched tokens immediately trade against USDC, AVAX, USDT, BTC.b, wETH, and even other meme tokens.\ <br>
* If you participated in MemeA, you can instantly swap it for the newly launched MemeB without relying on specific liquidity pairs!

**💰 Higher APR for Liquidity Providers –**

* In Uniswap, LPs only earn from swaps between the two tokens they provide liquidity for. In Datnoid’s unified pool, LPs earn fees from every swap, regardless of the pair, leading to significantly higher APR rewards.

**💸 Fewer Swaps, Lower Costs** – Datnoid’s unified pool reduces the number of swaps required to reach a desired token, saving traders money on fees and slippage.

This makes Datnoid not just the best meme coin launchpad but also a superior trading environment compared to traditional DEXes.

<br>

### Guaranteed Arbitrage Opportunities

<figure><img src="https://3004144969-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfhXylzUQTxezfoTINvEG%2Fuploads%2Fwc9Vsk5qFotStpDc4ZFO%2Ftelegram-cloud-photo-size-1-5116193016573439711-y.jpg?alt=media&amp;token=3e70dad8-7da5-4220-8cb0-b8837fee563a" alt=""><figcaption><p>We generate exponentially more arbitrage than any other DEX in the world</p></figcaption></figure>

More context for the image;

* The far left and far right represent the price of assets on each respective DEX
* Prices of assets are determined by the **ratio** of assets in a pool
  * compared to a static price bond curve model
* The less of an asset, the higher the price of that asset
* If more of an asset is added, the price of that asset decreases

{% hint style="info" %}
Since *$USDC* is the primary asset we price assets against, when more USDC is added to the pool, the price doesn't "go down" from $1, instead the price of the external assets goes up
{% endhint %}

In the above example, USDT temporarily is worth more than $1.&#x20;

"Selling" USDT or "Buying" with USDT are effectively the same thing; They both&#x20;

Normally, $100 of USDT gets you $100 of USDC. However, with the now higher spending power of USDT, you now get more USDC.

The arbitrager will continue to sell USDT for assets until enough USDT is removed from the pool to bring the price back to $1. They would never continue past this point because they'd be losing money instead of making money.&#x20;

&#x20;


# Guilds

and GuildTokens

## Creating a Guild

You can visit <https://datnoid.com/guilds/create> to create a guild. The process is very similar to creating a token. In fact, the process of creating a guild also creates a GuildToken.

## Guild Scores

The score is calculated by the sum of the top X guild members. This is to prevent people from gaming the points system through massive membership. The exact number is not determined yet, but will likely be around top 10 to top 15.

## GuildToken

GuildTokens represent your group/dao/clan/tribe. They have actual utility as well. Half of the seasonal rewards that go to the top guilds are distributed to holders of the GuildToken.&#x20;

Note: You do not need to belong to a guild to purchase their GuildToken. That means towards the end of a season, there is a lot of speculation as to which GuildToken will be the most lucrative.&#x20;

### Rewards

<figure><img src="https://3004144969-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfhXylzUQTxezfoTINvEG%2Fuploads%2FNibgeSbqGi7oPFp9L8AI%2FGuild%20Rewards.png?alt=media&amp;token=d5f57083-faf4-446e-aeec-5c94947179ed" alt=""><figcaption></figcaption></figure>

The exact number of qualifying guilds has yet to be determined, but will likely be in the single digits.

### Joining a Guild

There are two ways to join a guild. The first is to view the guild page, and hit the 'Request to join' button.

<figure><img src="https://3004144969-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfhXylzUQTxezfoTINvEG%2Fuploads%2F8k5iZKhpAYGNhYbueLZv%2Fimage.png?alt=media&amp;token=b962bea0-037c-468b-a24c-ba2d6d3ad9cb" alt=""><figcaption><p>The button is located on the bottom right</p></figcaption></figure>

The other way is if you are the guild master, you have a section to invite users.

<figure><img src="https://3004144969-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfhXylzUQTxezfoTINvEG%2Fuploads%2FZL6EnOtps0HYqUZN3ShZ%2Fimage.png?alt=media&amp;token=681fe069-77d2-49b9-a52f-6a53fdd084a8" alt=""><figcaption><p>Only visible to GMs.</p></figcaption></figure>

{% hint style="info" %}
Warning: Joining a guild is a PERMANENT decision. If you decide you don't want to belong to a guild anymore for whatever reason, you will have to create a new wallet and re-connect to the platform. This is to prevent gaming of the point system.&#x20;
{% endhint %}


# Fees

Swap fees

Each asset has it's own fee, and the fee amount of the swap is based on the receiving token of the swap.

| Asset     | Fee in Basis points |
| --------- | ------------------- |
| AVAX      | 150                 |
| USDC      | 50                  |
| USDT      | 50                  |
| WETH.e    | 150                 |
| MemeCoins | 250                 |

The fee amount from each swap is calculated in terms of LP tokens (regardless of pay/receive tokens), and the value is distributed to all LP token holders.&#x20;


# Leaderboard/Points

Join a guild to be eligible for rewards.

Here's what gets you the most points, in order.

1. **Place a PreOrder**&#x20;
   * The 1st person gets the largest bonus
   * The first 10 each get an additional bonus
   * the remainder are static
   * points are based on amount values
2. **Buy/Sell tokens**
   * Again, being early gets you bonus points
   * points are based on amount values
   * there is a cap to prevent wash trading
3. **Creating Tokens**
   * small static value, with a bonus if you reach a certain number of upvotes
4. **Comments**
   * small static value, with a cap per thread. A bonus is given to helpful comments.

## PreOrder Formula

$$
P\_{\text{total}} = \sum\_{i=1}^{n} \left(
\frac{A\_i}{10^6} \cdot \mathbf{1}*{{\text{USDC}}} +
\frac{A\_i}{10^{18}} \cdot \text{AVAX price} \cdot \mathbf{1}*{{\text{non-USDC}}} +
(10 - \text{pos}*i) \cdot \mathbf{1}*{{\text{pos}\_i < 10}}
\right)
$$

<details>

<summary>Explanation</summary>

* $$n$$: Total number of valid preorders by the user.
* $$Ai$$: Amount of preorder $$i$$.
* $$1{condition}$$: Indicator function that is 1 if the condition is true, and 0 otherwise.
* $$AVAX price$$: Current price of AVAX in USD.
* $$posi$$: Position of preorder $$i$$ in the overall list of preorders, sorted by creation date.

</details>

## Swap Formula

$$
P = \sum\_{i=1}^{n} \left( \frac{1}{\Delta T\_i + 1} \times \frac{F\_i}{10^{18}} \right) \times \left( 1 - \text{isWashTrade}(S\_{D\_i}, T\_{\text{swap}}) \right)
\
$$

<details>

<summary>Explanation</summary>

* $$n$$: Total number of valid swaps by the user.
* $$ΔT  i ​$$: Absolute difference in days between the swap date $$SDi$$ and the tokenize date $$TDi$$.
* $$F  i$$: Fee amount for swap $$i$$ in 18 decimal places.
* $$S  D  i$$: Swap date for swap $$i$$.
* $$T  swap ​$$: List of previous swap times for the same token.
* $$isWashTrade(S  D  i ​   ​  ,T  swap ​  )$$: Function returning 1 if the swap is considered cheating, and 0 otherwise.

</details>

## Thread Formula

$$
P\_{\text{total}} = \sum\_{i=1}^{n} \left(
2 +
2 \cdot \mathbf{1}\_{{\text{upvotes}*i > 3}} +
2 \cdot \mathbf{1}*{{\text{comments}*i > 3}} +
2 \cdot \mathbf{1}*{{\text{presales}\_i > 3}}
\right)
$$

<details>

<summary>Explanation</summary>

* $$n$$: Total number of threads submitted by the user.
* $$1  {condition} ​$$: Indicator function that is 1 if the condition is true, and 0 otherwise.
* $$upvotes  i$$: Number of upvotes for thread $$i$$.
* $$comments  i ​$$: Number of comments for thread $$i$$.
* $$presales  i$$: Number of presales for thread $$i$$.

</details>

## Comment Formula

$$
P\_{\text{total}} = \sum\_{i=1}^{n} \left( 1 + 1 \cdot \mathbf{1}\_{{\text{upvotes}*i > 3}} \right) \cdot \mathbf{1}*{{\text{count}(C, \text{thread}\_i) \leq 1}}
$$

<details>

<summary>Explanation</summary>

* $$n$$: Total number of valid comments by the user.
* $$1{condition}$$: Indicator function that is 1 if the condition is true, and 0 otherwise.
* $$upvotesi$$: Number of upvotes for comment $$i$$.
* $$count(C)$$: Count of comments by the user in each thread, capped at 2.

</details>


# Audit

Our Contracts have been audited by Paladin

<figure><img src="https://3004144969-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfhXylzUQTxezfoTINvEG%2Fuploads%2FbWXGgn5kjKvOIqnaOdJI%2Fimage.png?alt=media&amp;token=bf0d9777-7e89-46e3-a07b-d32600e9c0cf" alt=""><figcaption></figcaption></figure>

<https://paladinsec.co/projects/datnoid/>

<figure><img src="https://3004144969-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfhXylzUQTxezfoTINvEG%2Fuploads%2FdeO8V9SDjWpwSxP7Phen%2Fimage.png?alt=media&amp;token=82f3e6d6-11f1-4f55-98e6-0de672fe7fba" alt=""><figcaption><p>View full report below</p></figcaption></figure>

{% file src="/files/d28fCsaoki4DAwGcdTO5" %}


# vs. Pump(dot)fun

Datnoid vs Pump

| Features               |                                                                                       Datnoid                                                                                      |                                           Pump (and clones)                                          |
| ---------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------: |
| Token Creation         |                                                                 Supply, Name, Symbol, Launch type are customizable                                                                 |                              Same template and bond curve for all tokens                             |
| Liquidity              |                                                                  Shared Liquidity pool, enabling infinite routing                                                                  |                                              fragmented                                              |
| LP token profitability |                                   exponentially greater due to all swaps of all pairs increasing value of the LP token, and no Impermanent Loss.                                   |                              No swap fees earned on bond curve contracts                             |
| Fees                   |                                                                                Swap fees, that's it.                                                                               | Fees taken on bonding curve contract and 10 SOL fee ($$$$) is taken when listing to a 3rd party dex. |
| Scaling                | Can migrate to a Subnet, enabling very cheap gas, our own native gas token, any VM (not just EVM), while retaining interoperability with the C-chain (no liquidity fragmentation). |                                            Stuck on Solana                                           |
| Trading Base Pair      |                                                       AVAX/USDC/WETH.e and eventually any token can be swapped for any token                                                       |                                               SOL only                                               |
| Rewards                |                                                 Leaderboard points, as well as the $100M Catalyst Culture Fund for eligible tokens                                                 |                                                 none                                                 |
| Reliability            |                                                                            C-chain Tx success rate > 90%                                                                           |                                     Solana Tx success rate < 50%                                     |
| Community              |                                                              Token gated chat for holders, community stickers, guilds                                                              |                                                 none                                                 |
| NFT integration        |                                                     Select Partners can have their artwork integrated onto the platform as PFPs                                                    |                                                 none                                                 |


# Links

Website: <https://datnoid.com>

Twitter: <https://x.com/Datnoid_Dapp>

Telegram: <https://t.me/weirdfrens>

Discord: <https://discord.gg/HNH6ZehFaY>


# Contracts

Contract Addresses

### Datnoid Pool / DatnoidLP token

***

0x5767Fe67faB8c5EF82a242b6E3B2Df081aC505e9&#x20;

### MemeFactory

***

0xa65484bAbcba8b72aD83cdADD9512080B1Df5DfC&#x20;


# APIs

## Get Tickers

<mark style="color:green;">`GET`</mark> `/v1/tickers`

provides 24-hour pricing and volume information on each market pair available on an exchange.

**Headers**

| Name         | Value              |
| ------------ | ------------------ |
| Content-Type | `application/json` |

**Response**

{% tabs %}
{% tab title="200" %}

```json
[
    {
        "ticker_id": "WAVAX_USDC",
        "base_currency": "WAVAX",
        "target_currency": "USDC",
        "pool_id": "0x564b7b1262256A1B1C5dEA332bBF8b02A6a8E294",
        "last_price": "37.44822332076433549014",
        "base_volume": "56602187569191098140",
        "target_volume": "56602187569191098140",
        "liquidity_in_usd": "6010.00",
        "bid": "37.01665891326351628951",
        "ask": "37.44822332076433549014",
        "high": "37.448223320764335",
        "low": "37.01665891326352"
    }, 
    {
        "ticker_id": "CARL_WAVAX",
        "base_currency": "CARL",
        "target_currency": "WAVAX",
        "pool_id": "0x564b7b1262256A1B1C5dEA332bBF8b02A6a8E294",
        "last_price": "4.96790759118e-9",
        "base_volume": "57464149811728661654",
        "target_volume": "57464149811728661654",
        "liquidity_in_usd": "6010.00",
        "bid": "5.02706256286e-9",
        "ask": "4.96790759118e-9",
        "high": "5.02706256286e-9",
        "low": "4.96790759118e-9"
    },
]
```

{% endtab %}

{% tab title="400" %}

```json
{
  "error": "Invalid request"
}
```

{% endtab %}
{% endtabs %}

## Get Historical Data

<mark style="color:green;">`GET`</mark> `/v1/historical`

returns data on historical completed trades for a given market pair.

**Headers**

| Name         | Value              |
| ------------ | ------------------ |
| Content-Type | `application/json` |

**Parameters**

| ticker\_id  | string  | Mandatory   | A pair such as "AVAX\_USDC", with delimiter between                                                    |
| ----------- | ------- | ----------- | ------------------------------------------------------------------------------------------------------ |
| type        | string  | Mandatory   | To indicate nature of trade - *buy*/*sell*                                                             |
| limit       | integer | Recommended | Number of historical trades to retrieve from time of query. \[0, 200, 500...]. 0 returns full history. |
| start\_time | date    | Recommended | Start time from which to query historical trades from                                                  |
| end\_time   | date    | Recommended | End time for historical trades query                                                                   |

**Response**

{% tabs %}
{% tab title="200" %}

```json
[
    {
        "trade_id": 262,
        "price": "34.31795211475100926756",
        "base_volume": "150000000000000000",
        "target_volume": "681955410942937777072492189",
        "trade_timestamp": 1717180236250,
        "type": "buy"
    },
    {
        "trade_id": 261,
        "price": "34.37684110577885566875",
        "base_volume": "300000000000000000",
        "target_volume": "1363849421338671808388454352",
        "trade_timestamp": 1717122346487,
        "type": "buy"
    },
]
```

{% endtab %}

{% tab title="400" %}

```json
{
  "error": "Invalid request"
}
```

{% endtab %}
{% endtabs %}


# ABIs

For interacting with the contract directly

## Pool Contract

````json
```
[
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "AVAXRefundFailed",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        }
      ],
      "name": "AssetNotFound",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "payToken",
          "type": "address"
        }
      ],
      "name": "DuplicateToken",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "expected",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "actual",
          "type": "uint256"
        }
      ],
      "name": "IncorrectAmount",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "expected",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "actual",
          "type": "uint256"
        }
      ],
      "name": "InsufficientReceiveAmount",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "fee",
          "type": "uint256"
        }
      ],
      "name": "InvalidProtocolFee",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "payToken",
          "type": "address"
        }
      ],
      "name": "InvalidStake",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "payToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "receiveToken",
          "type": "address"
        }
      ],
      "name": "InvalidSwap",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "receiveToken",
          "type": "address"
        }
      ],
      "name": "InvalidUnstake",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "size",
          "type": "uint256"
        }
      ],
      "name": "TooLarge",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "size",
          "type": "uint256"
        }
      ],
      "name": "TooSmall",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TradingPausedError",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "UnexpectedNATIVEAVAX",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroAmount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroBalance",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroScale",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "fee",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "scale",
          "type": "uint256"
        }
      ],
      "name": "AssetAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "AssetRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "txCount",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        }
      ],
      "name": "BalanceUpdate",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "txCount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "lpAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "protocolAmount",
          "type": "uint256"
        }
      ],
      "name": "DistributeFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        }
      ],
      "name": "PresaleEnded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        }
      ],
      "name": "PresaleStarted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "txCount",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "payToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "payAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "receiveAmount",
          "type": "uint256"
        }
      ],
      "name": "Stake",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "txCount",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "payToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "receiveToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "payAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "receiveAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "feeAmount",
          "type": "uint256"
        }
      ],
      "name": "Swap",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "TradingPaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "TradingResumed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "txCount",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "receiveToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "payAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "receiveAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "feeAmount",
          "type": "uint256"
        }
      ],
      "name": "Unstake",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MULTISIG_ADMIN",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MULTISIG_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "payToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "payAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "receiveToken",
          "type": "address"
        }
      ],
      "name": "_quoteSwap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "receiveAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "_tradingPaused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "_wrappedNativeAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "fee_",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "balance_",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "scale_",
          "type": "uint256"
        }
      ],
      "name": "addAsset",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "asset",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "index",
              "type": "uint256"
            },
            {
              "internalType": "string",
              "name": "name",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "symbol",
              "type": "string"
            },
            {
              "internalType": "uint8",
              "name": "decimals",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "conversion",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "fee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "balance",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "scale",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastUpdated",
              "type": "uint256"
            }
          ],
          "internalType": "struct Pool.AssetState",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "assetAddresses",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "assets",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "index",
              "type": "uint256"
            },
            {
              "internalType": "string",
              "name": "name",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "symbol",
              "type": "string"
            },
            {
              "internalType": "uint8",
              "name": "decimals",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "conversion",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "fee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "balance",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "scale",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastUpdated",
              "type": "uint256"
            }
          ],
          "internalType": "struct Pool.AssetState[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        }
      ],
      "name": "endPresaleForToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "feeDistributionContractAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getFeeDistributionContractAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "info",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "name",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "symbol",
              "type": "string"
            },
            {
              "internalType": "uint8",
              "name": "decimals",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "balance",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "scale",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastUpdated",
              "type": "uint256"
            }
          ],
          "internalType": "struct Pool.PoolState",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "protocolFee",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "wrappedNativeTokenAddress",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "isPresaleActiveForToken",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pauseTrading",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "protocolFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "payToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "payAmount",
          "type": "uint256"
        }
      ],
      "name": "quoteStake",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "receiveAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "payToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "receiveToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "payAmount",
          "type": "uint256"
        }
      ],
      "name": "quoteSwap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "receiveAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "receiveToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "payAmount",
          "type": "uint256"
        }
      ],
      "name": "quoteUnstake",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "receiveAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "removeAsset",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "resumeTrading",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_feeDistributionContractAddress",
          "type": "address"
        }
      ],
      "name": "setFeeContract",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "fee",
          "type": "uint256"
        }
      ],
      "name": "setProtocolFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "payToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "payAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minReceiveAmount",
          "type": "uint256"
        }
      ],
      "name": "stake",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "receiveAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        }
      ],
      "name": "startPresaleForToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "payToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "receiveToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "payAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minReceiveAmount",
          "type": "uint256"
        }
      ],
      "name": "swap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "receiveAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "tokenInfos",
      "outputs": [
        {
          "internalType": "address",
          "name": "creator",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tradingPaused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "txCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "receiveToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "payAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minReceiveAmount",
          "type": "uint256"
        }
      ],
      "name": "unstake",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "receiveAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "wrappedNativeAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ]
```
````

## Factory Contract

````json
```json
[
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newAmount",
          "type": "uint256"
        }
      ],
      "name": "MaxAvaxAmountUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newAmount",
          "type": "uint256"
        }
      ],
      "name": "MaxUsdcAmountUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newAmount",
          "type": "uint256"
        }
      ],
      "name": "MinAvaxAmountUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newAmount",
          "type": "uint256"
        }
      ],
      "name": "MinUsdcAmountUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        }
      ],
      "name": "PreSaleCompleted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "paymentToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "PreSalePlaced",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "PreSaleRefunded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "PreSaleSuccess",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        }
      ],
      "name": "TokenCreated",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "USDC",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "WAVAX",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "initialSupply",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "creator",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "customMetadata",
          "type": "string"
        }
      ],
      "name": "createPresaleToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        }
      ],
      "name": "emergencyRefund",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "fee_",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "scale_",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "initialSupply",
          "type": "uint256"
        }
      ],
      "name": "executeFCFSPreOrderForToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "fee_",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "scale_",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "initialSupply",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "entropy",
          "type": "uint256"
        }
      ],
      "name": "executePreOrderForToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        }
      ],
      "name": "getAssetAdded",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getDeployedTokens",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        }
      ],
      "name": "getNextOrderIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "limit",
          "type": "uint256"
        }
      ],
      "name": "getPaginatedDeployedTokens",
      "outputs": [
        {
          "internalType": "contract MemeToken[]",
          "name": "",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getPool",
      "outputs": [
        {
          "internalType": "contract IPool",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        }
      ],
      "name": "getPreordersForToken",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenAmount",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "paymentToken",
              "type": "address"
            }
          ],
          "internalType": "struct MemeFactory.PreSaleOrder[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        }
      ],
      "name": "getPresaleOrderCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "poolContractAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_WAVAX",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_USDC",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        }
      ],
      "name": "isAssetAdded",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        }
      ],
      "name": "isPresaleCompleted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        }
      ],
      "name": "isRefundInProgress",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        }
      ],
      "name": "isTokenInSet",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxAvaxAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxPresaleOrders",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxUsdcAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "minAvaxAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "minUsdcAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "paymentToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        }
      ],
      "name": "placePreSaleOrder",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "preSaleOrders",
      "outputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "paymentToken",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_maxAvaxAmount",
          "type": "uint256"
        }
      ],
      "name": "setMaxAvaxAmount",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_maxUsdcAmount",
          "type": "uint256"
        }
      ],
      "name": "setMaxUsdcAmount",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_minAvaxAmount",
          "type": "uint256"
        }
      ],
      "name": "setMinAvaxAmount",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_minUsdcAmount",
          "type": "uint256"
        }
      ],
      "name": "setMinUsdcAmount",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "entropy",
          "type": "uint256"
        }
      ],
      "name": "shuffleOrdersForToken",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenAmount",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "paymentToken",
              "type": "address"
            }
          ],
          "internalType": "struct MemeFactory.PreSaleOrder[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "tokens",
      "outputs": [
        {
          "internalType": "contract MemeToken",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ]
```
````


# Performing a swap

Javascript example using viem

## Quote Swap

You may first want to get a quote before executing a transaction to see the estimated amount you will receive.

```typescript
async function getSwapQuote(
  payTokenAddress: string,
  receiveTokenAddress: string,
  payAmount: string
) {
  try {
    const data = await client.readContract({
      address: contractAddress,
      abi: poolABI,
      functionName: 'quoteSwap',
      args: [payTokenAddress, receiveTokenAddress, payAmount],
    });
    console.log('data', data);
  } catch (error) {
    console.error('Error in quoteSwap:', error);
  }
}

```

```javascript
Result [ 333222203700616769461576n, 2500000000000000000n ]
```

The first item of the array response will be the expected amount of the receiveToken (dont forget to format in decimals), the second item is the fee amount in LP tokens.&#x20;

## Actual Swap

To Perform the actual swap, will require a 4th parameter, minReceiveAmount. This is basically how you set slippage. set to 0 means no slippage.

```typescript
async function swap(
  payTokenAddress: string,
  receiveTokenAddress: string,
  payAmount: string,
  minReceiveAmount: string
) {
  try {
    const data = await walletClient.writeContract({
      address: contractAddress,
      abi: poolABI,
      functionName: 'swap',
      args: [payTokenAddress, receiveTokenAddress, payAmount, minReceiveAmount],
      account: account,
    });
    console.log('swap data', data);
  } catch (error) {
    console.error('Error in swap:', error);
  }
}
```

Sample response.

```javascript
[ 
1n, 
'0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266', 
'0x5FbDB2315678afecb367f032d93F642f64180aa3', 
'0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512', 
1230000000000000000n, 
41164953n, 
20806901801573205n 
]
```

and the types

```solidity
Swap(
uint256 indexed txCount,
address indexed user,
address payToken,
address receiveToken,
uint256 payAmount,
uint256 receiveAmount,
uint256 feeAmount
);
```

\ <br>


# Place a preorder

Javascript example using viem

## Pre Order

The acceptable Payment Tokens are **AVAX,WAVAX**, and **USDC**.

### WAVAX Contract Address

```typescript
0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7
```

### USDC Contract Address

```typescript
0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E
```

Note: use 6 decimal places for USDC. 18 for AVAX/WAVAX

### Native AVAX&#x20;

```typescript
0x0000000000000000000000000000000000000000
```

```typescript
async function placePreSaleOrder(
  tokenAddress: string,
  paymentToken: string,
  payAmount: string, 
) {
  try {
    const data = await walletClient.writeContract({
      address: factoryContractAddress,
      abi: factoryABI,
      functionName: 'placePreSaleOrder',
      args: [tokenAddress, paymentToken, payAmount],
      account: account,
    });
    console.log('swap data', data);
  } catch (error) {
    console.error('Error in swap:', error);
  }
}
```

\ <br>


# Solana to Avalanche

SOL to AVAX bridge guide

### Requirements

* Enough SOL to cover gas, and USDC on the Solana network
* a solana wallet, and a avalanche wallet
* Some AVAX on the Avalanche network to cover gas

&#x20;

On [jupiter](https://jup.ag/bridge/cctp) , Make sure you have the *From* Network as Solana, and the *To* set as Avalanche.&#x20;

<figure><img src="https://3004144969-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfhXylzUQTxezfoTINvEG%2Fuploads%2FDDVIuxKp3kuTb204J95G%2Fimage.png?alt=media&amp;token=70c430a9-2604-4d31-a44c-5c8467898739" alt=""><figcaption></figcaption></figure>

Next, click the Connect wallet button for Solana.

<figure><img src="https://3004144969-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfhXylzUQTxezfoTINvEG%2Fuploads%2F3dAOLELDYahModdQ9U5W%2Fimage.png?alt=media&amp;token=505cf6c9-20bd-417f-b4e4-0ce51c59dc8a" alt=""><figcaption></figcaption></figure>

In this guide, we will be using Phantom as the example.

Next, click Connect wallet button for Avalanche.

If you don't already have a wallet, we recommend using <https://metamask.io/>

<figure><img src="https://3004144969-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfhXylzUQTxezfoTINvEG%2Fuploads%2FzNCUtfBRW6TJJcvrs6da%2Fimage.png?alt=media&amp;token=153fbb37-3e03-480f-91ae-8bfb9c1b6138" alt=""><figcaption></figcaption></figure>

Enter the Amount of USDC you wish to bridge on the top input. Your screen should look similar.

#### Warning

Make sure you have some AVAX on the destination wallet.

<figure><img src="https://3004144969-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfhXylzUQTxezfoTINvEG%2Fuploads%2FAUAuwrKuxVTfepRQdH9e%2Fimage.png?alt=media&amp;token=dc9d3380-3c94-4e81-9686-e91eaf981e60" alt=""><figcaption></figcaption></figure>

Once you're ready, click this button.

Next, you'll see a screen like below.

After the confirmations, your USDC will be deducted from Solana.

<figure><img src="https://3004144969-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfhXylzUQTxezfoTINvEG%2Fuploads%2FDjVtmkGlArur1I6fi5mr%2Fimage.png?alt=media&amp;token=0626e79e-3d62-4391-b243-6a0a0b41ae68" alt=""><figcaption></figcaption></figure>

Next you should see an option to claim.

<figure><img src="https://3004144969-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfhXylzUQTxezfoTINvEG%2Fuploads%2FSTNDHuiRBlrXhY3ANTJa%2Fimage.png?alt=media&amp;token=e3c9552f-0d9b-49cb-a262-bf1be76f0c38" alt=""><figcaption></figcaption></figure>

After a couple seconds of clicking the button, you should see

<figure><img src="https://3004144969-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfhXylzUQTxezfoTINvEG%2Fuploads%2FxiOyP2zx0SUoXH2wnOn9%2Fimage.png?alt=media&amp;token=60008dda-5b74-487d-9e54-363c48974163" alt=""><figcaption></figcaption></figure>

The USDC is now in your Avalanche Wallet and ready to swap for any asset on Datnoid


# Ethereum to Avalanche

ETH to AVAX Bridge guide

### Requirements

* An EVM wallet (like Metamask)
* ETH on Ethereum network, or USDC

<mark style="color:green;">When users bridge $75 or more of assets from the Ethereum or Bitcoin network to the Avalanche network, a portion of AVAX will be airdropped to help pay for initial swaps.</mark>

Visit <https://core.app/en/bridge/> to begin.

From there, make sure 'Bridge' is selected.

<figure><img src="https://3004144969-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfhXylzUQTxezfoTINvEG%2Fuploads%2FZjpZradaRD8R4URXQYFS%2Fimage.png?alt=media&amp;token=cd8cd2fb-1ebe-44fb-bf6d-a9392b5c85c9" alt=""><figcaption></figcaption></figure>

The *From* network will be Ethereum.&#x20;

<figure><img src="https://3004144969-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfhXylzUQTxezfoTINvEG%2Fuploads%2FL4NVA0gXWOgGRXINLcRi%2Fimage.png?alt=media&amp;token=999a4bf7-f8bd-4450-b921-204db1882228" alt=""><figcaption></figcaption></figure>

Select the Asset you are trying to bridge.  (USDT/USDC/ETH) etc.

After that, click the bridge Tokens button.

confirm the transaction and the funds will be sent to the same address of your wallet, but on the Avalanche network.

If you bridge over $75 worth, you'll also receive some AVAX in order to cover gas costs.

It is highly recommended you swap your newly bridged assets for at least 0.1 AVAX in order to pay for several transactions without worrying about gas.

The wrapped asset on Avalanche is called **WETH.e**&#x20;


# Bitcoin to Avalanche

BTC to AVAX Bridge guide

### Requirements

* [Core Wallet](https://chromewebstore.google.com/detail/core-crypto-wallet-nft-ex/agoakfejjabomempkjlepdflaleeobhb)
* BTC on Bitcoin network (0.00125 Minimum)

<mark style="color:green;">When users bridge $75 or more of assets from Bitcoin network to the Avalanche network, a portion of AVAX will be airdropped to help pay for initial swaps.</mark>

Select the Bitcoin network in the Core wallet

<figure><img src="https://3004144969-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfhXylzUQTxezfoTINvEG%2Fuploads%2Fqlr6SkvkjtHr3yV6M1dI%2Fimage.png?alt=media&amp;token=d2c44170-c14c-488e-a17e-a81ba98da36a" alt=""><figcaption></figcaption></figure>

From there, make sure 'Bridge' is selected.

<figure><img src="https://3004144969-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfhXylzUQTxezfoTINvEG%2Fuploads%2Fk7KdfCvok4jmN0w3iBB2%2Fimage.png?alt=media&amp;token=b4d10e70-1efc-43d4-b9d6-9ce7aa2b483a" alt=""><figcaption></figcaption></figure>

The *From* network will be Bitcoin&#x20;

After that, click the bridge Tokens button.

Briding takes at least 10 minutes from BTC, so it is recommened to pay above market gas prices or you may end up waiting a lot longer.&#x20;

If you bridge over $75 worth, you'll also receive some AVAX in order to cover gas costs.

It is highly recommended you swap your newly bridged assets for at least 0.1 AVAX in order to pay for several transactions without worrying about gas.

The asset on Avalanche is called **BTC.b** and this represents native BTC. You can bridge BTC.b back to BTC using the same bridge at any time.


