# Tutorials & Help

Learn how to create, manage, and optimize tokens with step-by-step guides and detailed feature explanations in the 20lab documentation.

### Step-by-step guides

On our [Medium blog](https://medium.com/@20lab) you can find our step-by-step guides which will show you the entire process of creating a token on [20lab.app](https://20lab.app/) and accessing it through the owner dashboard:

{% embed url="<https://medium.com/@20lab/generating-your-first-erc-20-token-on-20lab-app-78ebca8da2d4>" %}
Guide for generating a simple token with small number of extra features inside and no transaction taxes.
{% endembed %}

{% embed url="<https://medium.com/@20lab/making-a-deflationary-erc-20-token-on-20lab-app-c4f576198500>" %}
Guide for generating a more advanced token with large number of features inside and transaction taxes as well.
{% endembed %}

### Features overview

If you need a detailed overview of the features, please check the documentation. Each category describes all the features available in [20lab.app](https://20lab.app/) token generator with all the necessary information, recommendations and precautions.

#### ERC-20 (EVM)

{% content-ref url="/pages/3jTlgMZx1A8PKD5bO5pT" %}
[General](/features/general)
{% endcontent-ref %}

{% content-ref url="/pages/4roa1eozFtwdPIrXhekO" %}
[Optional](/features/optional)
{% endcontent-ref %}

{% content-ref url="/pages/hEquxaI5ppnXUzMfpyFF" %}
[Taxes](/features/taxes)
{% endcontent-ref %}

{% content-ref url="/pages/p2dLh7uG7TiLgmK8Gz1y" %}
[Swap threshold ratio](/features/swap-threshold-ratio)
{% endcontent-ref %}

#### SPL (Solana)

{% content-ref url="/pages/g0YPBAz6dsSan0tLfEYo" %}
[General](/solana-features/general)
{% endcontent-ref %}

{% content-ref url="/pages/GppZqVIMx5NuAKatLKXa" %}
[Optional](/solana-features/optional)
{% endcontent-ref %}

{% content-ref url="/pages/WMj0G6VW4X9e3NizAAr1" %}
[Metadata](/solana-features/metadata)
{% endcontent-ref %}

#### Sui

{% content-ref url="/pages/bvwQM4bIfcYc7pPJdQ5q" %}
[General](/sui-features/general)
{% endcontent-ref %}

{% content-ref url="/pages/STCjue5uV32NTbpFLXIq" %}
[Optional](/sui-features/optional)
{% endcontent-ref %}

{% content-ref url="/pages/MUEDwdr74rnr6nQpRgBS" %}
[Metadata](/sui-features/metadata)
{% endcontent-ref %}

### Troubleshooting errors

We know that some errors you might face during your visit at [20lab.app](https://20lab.app/) couldn't be predicted in the development phase. If you see an error during generation, deployment or using the dashboard please follow these steps:

1. Reconnect your wallet
2. Refresh the entire website (Generator data will be auto-saved)

### More help

If you are still facing problems with 20lab and don't know how to get through them, we will be glad to help you via our support channels:

1. Telegram channel: <https://t.me/x20lab>
2. E-mail: <contact@20lab.app>


# Smart Contracts

Explore 20lab's registry smart contract addresses across supported blockchains.

Each token deployment transaction on [20lab.app](https://20lab.app/) is processed through our registry smart contract to charge payment and save basic token information. Below you can find the addresses of each smart contract per blockchain.

## MAINNETS

| Blockchain          | Smart contract architecture | Address                                      |
| ------------------- | --------------------------- | -------------------------------------------- |
| Ethereum            | ERC1967Proxy - uRegistryV5  | 0x896cB15542A50e084CB01138211daA110b1Fe8F2   |
| Binance Smart Chain | ERC1967Proxy - uRegistryV5  | 0x896cB15542A50e084CB01138211daA110b1Fe8F2   |
| Polygon             | ERC1967Proxy - uRegistryV5  | 0x896cB15542A50e084CB01138211daA110b1Fe8F2   |
| Arbitrum One        | ERC1967Proxy - uRegistryV5  | 0x896cB15542A50e084CB01138211daA110b1Fe8F2   |
| Avalanche C-chain   | ERC1967Proxy - uRegistryV5  | 0x896cB15542A50e084CB01138211daA110b1Fe8F2   |
| Optimism            | ERC1967Proxy - uRegistryV5  | 0x896cB15542A50e084CB01138211daA110b1Fe8F2   |
| Cronos              | ERC1967Proxy - uRegistryV5  | 0x896cB15542A50e084CB01138211daA110b1Fe8F2   |
| PulseChain          | ERC1967Proxy - uRegistryV5  | 0x896cB15542A50e084CB01138211daA110b1Fe8F2   |
| Base                | ERC1967Proxy - uRegistryV5  | 0x896cB15542A50e084CB01138211daA110b1Fe8F2   |
| Linea               | ERC1967Proxy - uRegistryV5  | 0x896cB15542A50e084CB01138211daA110b1Fe8F2   |
| Mantle              | ERC1967Proxy - uRegistryV5  | 0x896cB15542A50e084CB01138211daA110b1Fe8F2   |
| Blast               | ERC1967Proxy - uRegistryV5  | 0x896cB15542A50e084CB01138211daA110b1Fe8F2   |
| Metis               | ERC1967Proxy - uRegistryV5  | 0x896cB15542A50e084CB01138211daA110b1Fe8F2   |
| Core                | ERC1967Proxy - uRegistryV5  | 0x896cB15542A50e084CB01138211daA110b1Fe8F2   |
| Sonic               | ERC1967Proxy - uRegistryV5  | 0x896cB15542A50e084CB01138211daA110b1Fe8F2   |
| Unichain            | ERC1967Proxy - uRegistryV5  | 0x896cB15542A50e084CB01138211daA110b1Fe8F2   |
| HyperEVM            | ERC1967Proxy - uRegistryV5  | 0x896cB15542A50e084CB01138211daA110b1Fe8F2   |
| Monad               | ERC1967Proxy - uRegistryV5  | 0x896cB15542A50e084CB01138211daA110b1Fe8F2   |
| Robinhood           | ERC1967Proxy - uRegistryV5  | 0x896cB15542A50e084CB01138211daA110b1Fe8F2   |
| Solana Mainnet      | Registry Program            | 77777cziGtpeZATxr4LKCBxMhU4CrbBkbRKiEpBuJA67 |
| Sui Mainnet         | -                           | -                                            |

## TESTNETS

| Blockchain                  | Smart contract architecture | Address                                      |
| --------------------------- | --------------------------- | -------------------------------------------- |
| Ethereum Sepolia            | ERC1967Proxy - uRegistryV5  | 0x896cB15542A50e084CB01138211daA110b1Fe8F2   |
| Binance Smart Chain Testnet | ERC1967Proxy - uRegistryV5  | 0x896cB15542A50e084CB01138211daA110b1Fe8F2   |
| Base Sepolia                | ERC1967Proxy - uRegistryV5  | 0x896cB15542A50e084CB01138211daA110b1Fe8F2   |
| Arbitrum Sepolia            | ERC1967Proxy - uRegistryV5  | 0x896cB15542A50e084CB01138211daA110b1Fe8F2   |
| Unichain Sepolia            | ERC1967Proxy - uRegistryV5  | 0x896cB15542A50e084CB01138211daA110b1Fe8F2   |
| Solana Testnet              | Registry Program            | 77777cziGtpeZATxr4LKCBxMhU4CrbBkbRKiEpBuJA67 |
| Solana Devnet               | Registry Program            | 77777cziGtpeZATxr4LKCBxMhU4CrbBkbRKiEpBuJA67 |
| Sui Testnet                 | -                           | -                                            |


# Generator changelog

All major & minor changes made to the 20lab token generator.

<table><thead><tr><th width="158">Version</th><th>Details</th></tr></thead><tbody><tr><td>1.11.x (current)</td><td><ul><li><strong>New Sui features: Freezable &#x26; Pausable.</strong> New features have been added to the token generator on Sui, allowing the Deny Cap holder to perform freezing of addresses or pausing the entire token.</li><li>Sui token size has been optimized for reduced gas for deployment.</li><li>Various gas optimizations for ERC-20 tokens.</li><li>Added "Treasury burn" feature in Sui dashboard and total dividend distributed tracker for ERC-20 tokens with dividend tax.</li><li>Added dynamic reallocation of metadata for SPL (Solana) tokens and improved mint creation.</li></ul></td></tr><tr><td>1.10.x</td><td><ul><li><strong>Liquidity tax:</strong> LP tokens burned to 0xdead address instead of 0x0. This change was made to preserve compatibility across all DEXes.</li><li><strong>New Algebra-based DEXes</strong> with volatile pool integration available.</li><li><strong>New registry smart contracts</strong> have been updated and deployed on all supported EVM chains. The size of each contract is twice as small as the previous one, drastically reducing deployment gas costs.</li><li>Pricing changed to a more flexible version.</li></ul></td></tr><tr><td>1.9.x</td><td><ul><li><strong>Improved feature "Token recovery".</strong> Now you can recover not only foreign ERC-20 tokens, but also native tokens. There is a new feature that allows to recover native token from token contract. If the token contract has a swap threshold feature, only the excess amount of tokens can be recovered.</li><li><strong>Changes for wallet &#x26; dividend tax sent in custom token.</strong> Instead of classical transfer functions, the safeERC20 library is being utilized to ensure that non-ERC20 compliant tokens can be used.</li><li><strong>Changes for wallet tax sent in native coin.</strong> No callback gas limit when sending to recipient wallet.</li><li><strong>Changes for dividend tax sent in native coin.</strong> Adjustable callback gas between 2300 and 10000 gas units to support auto-claim for smart contracts with expensive receive logic eg. on-chain multisigs. Also from now on, manual claims don't have a callback gas limit restriction.</li><li><strong>Tokens are compiled with solc v. 0.8.25.</strong></li><li>Changed AMM mapping behavior to support internal DEX transfers during swapping and to allow the addition of not only liquidity pools but also other smart contracts.</li><li>Custom errors were introduced and replaced classic revert strings - gas optimization.</li><li>Token contracts cannot now receive a native coin, except if the sender is a chosen Default Exchange. This will disallow sending native coins on its balance by mistake.</li><li>0x0 address is now not excluded from dividends by default as it cannot receive tokens anyway - gas optimization.</li><li>Multiple other changes including: event names case fixes and other gas optimizations.</li></ul></td></tr><tr><td>1.8.x</td><td><ul><li><strong>New feature: "Permit function"</strong>. This feature can be used to implement gasless approvals according to the ERC-2612 standard.</li><li>LP Tokens Recipient removed from Liquidity Tax feature. Instead of this function, the 0x0 address is hardcoded to permanently burn this part of the LP tokens to improve security for all token holders.</li><li>Improved Owner Solution - After a transfer of ownership, the new owner is now required to explicitly accept ownership, while also ensuring that no mistake was made when entering the owner's address.</li></ul></td></tr><tr><td>1.7.x</td><td><ul><li><strong>New feature: "enableTrading function"</strong>. Can be used to delay the token launch on DEX when liquidity is already added.</li><li>Improved behavior for excludeFromLimits function for wallet tax recipients when changed manually by owner.</li><li>Transaction to recover unswapped tokens from liquidity tax can now be called by anyone - won't be owner-restricted.</li><li>The swap threshold won't be a fixed number of tokens but it will be calculated as a percentage of liquidity available on default exchange from now on.</li><li>Transaction after the swap threshold is filled won't trigger the swaps, but it will be triggered earlier with the same transaction that is filling it maximally.</li></ul></td></tr><tr><td>1.6.x</td><td><ul><li>Users can now create tokens with the same addresses on 2 or more different blockchains.</li><li>Anti-scam limits have been extended and will affect these features:</li></ul><ol><li>Max wallet amount cannot be less than 0.1% of total supply</li><li>Max transaction limits, each cannot be less than 0.05% of the total supply.</li><li>Max anti-bot time limited to 12 hours</li><li>Minimum amount required to be eligible for dividends cannot be higher than 1% of initial supply.</li></ol><ul><li>Changed gas for processing limit in dividend tax to 500k gas units.</li><li>The same promo code can now reduce the token creation price and the price of the custom verification label.</li><li>New feature in liquidity tax to recover unswapped tokens.</li><li>Improved prefix search function.</li></ul></td></tr><tr><td>1.5.x</td><td><ul><li>Tokens are compiled with solc v. 0.8.19</li><li>Token symbol can contain max. 20 characters (previously max. 10 characters)</li><li>Verification extended to dependency contracts</li></ul><p></p><p>The following changes have been made to certain parameters in the generator:</p><ul><li>1.0 ≤ Initial supply ≤ 9,999,999,999,999,999.9</li><li>1 ≤ Decimals ≤ 18</li><li>Initial supply ≤ Max supply ≤ 9,999,999,999,999,999.9</li></ul></td></tr><tr><td>1.4.x</td><td><ul><li>Max transaction limit can support separate limits for each transaction type (previously only 1 value for specified types)</li><li>Custom token prefix search</li><li>Migration to viem.sh</li><li>Improved liquidity tax functionality</li></ul></td></tr><tr><td>1.3.x</td><td><ul><li>Unicode character support for token name &#x26; symbol</li><li>Custom exchange option</li></ul></td></tr><tr><td>1.2.x</td><td><ul><li>Numerous changes, improvements and bug fixes</li></ul></td></tr><tr><td>1.1.x</td><td>First version of <a href="https://20lab.app/">20lab.app</a> token generator</td></tr></tbody></table>


# Partners

Official partners of 20lab token generator.

Page for official partners of [20lab.app](https://20lab.app/) that we have worked with and can highly recommend for any kind of cooperation:

{% content-ref url="/pages/0q49pJoHDNqplUKKF832" %}
[EtherAuthority](/partners/etherauthority)
{% endcontent-ref %}

If you have partnership proposals or business collaboration ideas, feel free to reach out via email at <contact@20lab.app>.


# EtherAuthority

EtherAuthority is a web3 security company specializing in providing security solutions and services for blockchain and decentralized applications (dApps).

Their primary focus is on ensuring the safety and integrity of smart contracts, blockchain networks, and related technologies.

EtherAuthority offers a range of services including smart contract audits, security consulting, vulnerability assessments, as well as blockchain development services.

By leveraging their expertise in blockchain technology and security best practices, EtherAuthority aims to help organizations prevent hacks, mitigate risks, and maintain the trust of their users in the rapidly evolving web3 ecosystem.

🔗 <https://etherauthority.io/>


# Coinpedia

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FvcpNiAd16dxF4v5XvFQ9%2FRound%20Main%20Logo.png?alt=media&amp;token=15ba4bd1-616b-4297-ba60-fbc8a8b3c9b7" alt="" width="375"><figcaption></figcaption></figure>

Coinpedia is a crypto news portal, offering fintech and Web3 information, real-time market tracking, breaking news, price analysis, predictions, and in-depth research reports. The platform features a community for discussions, a curated list of global Web3 events, and one of the most detailed directories of top fintech companies and industry professionals.

🔗 [https://coinpedia.org/](<https://coinpedia.org/ >)


# Media kit

Download various 20lab brand resources and view the guidelines.

## Usage Guidelines

When using 20lab's brand assets, please adhere to the following guidelines:

⛔  Do not alter the logo's colors, proportions, or orientation.

🔍  Ensure clear space around the logo for visibility and impact.

🎨  Use the provided color palette to maintain brand consistency.

You can use 20lab brand resources when:

✅  Referring to our products and services, such as token generation or customization features.

✅  Linking to our official website or products, like “Create your ERC-20 token on 20lab”.

✅  Declaring an official partnership, but only if explicitly approved by a qualified 20lab team member.

✅  Highlighting 20lab in articles, tutorials, or content showcasing blockchain tools or services.

✅  Featuring 20lab in events, conferences, or materials related to blockchain innovations, with prior   written approval.

## Logo&#x20;

Here you can download full 20lab logo which is available in various formats. Please ensure it is used in accordance with our brand guidelines.

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

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

## Symbol

Here you can download the 20lab symbol in various formats.

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

{% file src="/files/2gml6eieoLPPKXZn3NAB" %}

## Color Palette

<table data-view="cards"><thead><tr><th align="center"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td align="center"><strong>#0C0C1C</strong></td><td><a href="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FM8NVTiKK2dxpws2vAgYh%2F0C0C1C%20(2).png?alt=media&amp;token=67be5a39-2bfd-4863-a48e-9c48a6b81ca9">0C0C1C (2).png</a></td></tr><tr><td align="center"><strong>#07E3F8</strong></td><td><a href="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FiNmAhXSqs1zNv3cfqceY%2F07E3F8%20(2).png?alt=media&amp;token=61e160cb-6369-453d-86e9-6e78fd8395fe">07E3F8 (2).png</a></td></tr><tr><td align="center"><strong>#F1F5F9</strong></td><td><a href="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FhOUl5KlA0U90M5sNm4Eh%2Ff1f5f9%20(2).png?alt=media&amp;token=052e06d5-31ef-4039-820e-ebc3afd2fe66">f1f5f9 (2).png</a></td></tr><tr><td align="center"><strong>#026CDC</strong></td><td><a href="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2F6FF8jYY0584O3LUOLzEo%2F026CDC%20(2).png?alt=media&amp;token=18a0bc08-76a0-43bd-82c7-21323123af77">026CDC (2).png</a></td></tr><tr><td align="center"><strong>#0B2034</strong></td><td><a href="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FBNpnywmzk3iMpFNWNUi0%2F0B2034%20(2).png?alt=media&amp;token=a6466087-3d87-4070-9ced-aebae6f80e8a">0B2034 (2).png</a></td></tr></tbody></table>

## Contact Information

🌐  Website: <https://20lab.app>

&#x20;𝕏   X/Twitter: <https://x.com/x20lab>

🗨️  Telegram: <https://t.me/x20lab>

📧  Email: <contact@20lab.app>

{% hint style="info" %}
*For more detailed information and resources, please visit our official website or contact us directly.*
{% endhint %}


# General

Features available in "General" section in 20lab.app token generator for ERC-20 tokens.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2F6NGYTnoH5ASMngStja8Y%2Fimage.png?alt=media&amp;token=2f86267b-2e33-4077-bdd9-ad20a53c846d" alt=""><figcaption></figcaption></figure>

### Blockchain

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FhYUSNIcFprb69mSpRQvw%2Fimage.png?alt=media&amp;token=435c646f-6497-43d7-84eb-17c032be3c1d" alt=""><figcaption></figcaption></figure>

The blockchain field shows you which blockchain you are currently connected to in your Web3 wallet among supported networks on [20lab.app](https://20lab.app/). For example, if you are connected to BNB Smart Chain, it will be displayed in this field. This means that when you create your token, it will be deployed on that specific blockchain network.

### Token name & Token symbol

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FjOSq65gB2YCHNiW0148X%2Fimage.png?alt=media&amp;token=bde662a3-40c6-4f8c-b349-b60c953a607d" alt=""><figcaption></figcaption></figure>

#### Token Name

The token name field allows you to specify the full name of your token, which will be publicly visible after creation. This is the complete, descriptive name of your project (e.g., "My Project Token").

#### Token Symbol

The token symbol is a shorter version of the name that is usually used to identify the token on exchanges and wallets. It's typically 3-5 characters long (e.g., "MPT").

{% hint style="warning" %}
**Important:** Token name and token symbol cannot be changed later!
{% endhint %}

### Contract name

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FtQTp6ArMY6e51Jbj0Kd7%2Fimage.png?alt=media&amp;token=b83355cd-dc89-4935-80e8-5c782bfa1737" alt=""><figcaption></figcaption></figure>

The smart contract name is publicly visible after verification on Block Explorer and does not have to be the same as your token name. You can name your smart contract anything you want as long as it follows the correct syntax, which can include: letters, digits, and underscores (\_).

If you are not sure what name to use, you can use the automatically generated value based on your token name.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FqD7o3NBkrwOrKSI8gtKP%2FOnPaste.20240507-102949.png?alt=media&amp;token=f2479e3d-6d4a-44f6-b279-f181761d881e" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**Important:** Smart contract name cannot be changed later!
{% endhint %}

### Initial supply

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2F7tNmQCNmbWQEmR2oKts5%2Fimage.png?alt=media&amp;token=816a13f0-bc8d-4b70-ba4c-ca65929c4e8b" alt=""><figcaption></figcaption></figure>

Initial supply is the amount of tokens that will be minted at the start and sent to the selected address called the "supply recipient".

If you don't select the "Mintable" feature for your token, the initial supply automatically becomes the total supply with no possibility to increase it after deployment.

### Mintable

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FbNivdNPtYJAo7RaJs9vN%2Fimage.png?alt=media&amp;token=ba2e3798-4a2f-4d27-98fb-407f57d82ee7" alt=""><figcaption></figcaption></figure>

This feature adds an owner-restricted mint() function to your token's code. With this function, the owner can mint additional tokens to any address of their choice. This function works until the total supply of tokens reaches the maximum supply specified during the generation phase.

{% hint style="warning" %}
**Important:** Maximum supply cannot be changed later!
{% endhint %}

### Decimals

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FN84CUHxqNoBeFoOrPsJe%2Fimage.png?alt=media&amp;token=d4640a24-590e-4abb-9e77-f8d77048b2de" alt=""><figcaption></figcaption></figure>

Decimals determine how many decimal places your token can be divided into, ranging from 1 to 18. The most common value for tokens is 18, which means that the smallest unit of your token will be 0.000000000000000001 (1 wei).

**Examples:**

* 18 decimals: Your token can be divided into very small fractions (like ETH)
* 6 decimals: Your token behaves more like traditional currency (like USDC)
* 0 decimals: Your token can only exist as whole numbers

{% hint style="warning" %}
**Important:** Decimals cannot be changed later!
{% endhint %}

### Supply recipient & Token owner

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FWJZN6sf7hK4GxoON0iUP%2Fimage.png?alt=media&amp;token=86b572e4-03db-494a-8ce4-7736b2166e8c" alt=""><figcaption></figcaption></figure>

#### Supply Recipient

The supply recipient is the wallet address that will receive the initial supply of tokens after the token contract is created. By default, this is the same address as your currently connected wallet.

You can enable the "Different supply recipient" option if you want the initial supply to be sent to a different address instead.

#### Token Owner

The token owner is the wallet address that controls all the owner-restricted functions in your token (such as minting, pausing, or updating settings). By default, this is the same address as your currently connected wallet.

You can enable the "Different token owner" option if you want ownership to be transferred to a different address after token creation.

{% hint style="info" %}
**Note:** Both addresses can be the same or different, depending on your project's needs. Consider your security and operational requirements when making this decision.
{% endhint %}


# Optional

Features available in "Optional" section in 20lab token generator for ERC-20 tokens.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2F2WADW8jH5UAgn2MyhHf4%2Fimage.png?alt=media&amp;token=6cab386b-9fcf-4240-9124-80a762562eb8" alt=""><figcaption></figcaption></figure>

### Default exchange

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2F9sVhiBdh6eebWGRXCwvZ%2Fimage.png?alt=media&amp;token=3b1c1f8a-6fb8-47b7-8abe-734656987d7e" alt=""><figcaption></figcaption></figure>

Default exchange allows you to choose which DEX (decentralized exchange) your token smart contract will be connected to.

While it doesn't add important functionality by itself, it unlocks many more features in the token generator. All features that require DEX connectivity need this connection to work properly. For example, the Anti-bot cooldown feature requires a DEX connection to track the buys and sells of each address and apply cooldowns accordingly.

{% hint style="info" %}
**Note:** Each blockchain has different DEXes available. After connecting your wallet, you will see the available options to choose from.
{% endhint %}

### Anti-bot cooldown

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FuXl40cTz6fkDaKNwSWwt%2Fimage.png?alt=media&amp;token=135c4e15-449b-4ada-a8d2-35c5e327da2c" alt=""><figcaption></figcaption></figure>

Anti-bot cooldown is an easy way to prevent bots from buying and selling immediately to make quick profits. By setting a cooldown time, you specify how long an address should be frozen after making a buy or sell transaction.

**Example:** If someone buys tokens on your default exchange and your cooldown time is 2 minutes, they will not be able to send or receive tokens until that cooldown period has passed.

{% hint style="warning" %}
**Important:** Some automated testing websites may incorrectly identify your token as a honeypot if they do not detect the Anti-bot cooldown feature properly.
{% endhint %}

#### Adding Other Exchanges

If you want to add liquidity to other exchanges (not your default exchange), this is possible. You can add other pair smart contracts so they can be recognized by your token smart contract. This can be done after deployment in the token owner dashboard using the setAMM() function.

Check the addresses that are **excluded from "Anti-bot cooldown"** by default:

{% content-ref url="/pages/GB9dXegxdEOF6xMcRT3T" %}
[Excluded addresses](/features/excluded-addresses)
{% endcontent-ref %}

### EnableTrading function

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FnXp2srY0FDAwIrouCi8r%2Fimage.png?alt=media&amp;token=1786515e-2a00-4bd3-aebd-b2fdf4fdf38f" alt=""><figcaption></figcaption></figure>

This feature adds an enableTrading() function to your token's code. It will restrict any interaction with the DEX until the owner enables trading permanently. No one other than excluded addresses can buy, sell, or add liquidity until trading is enabled.

This is useful for preventing trading before you're ready to launch, such as during initial liquidity setup.

Check the addresses that are **excluded from "EnableTrading function"** by default:

{% content-ref url="/pages/GB9dXegxdEOF6xMcRT3T" %}
[Excluded addresses](/features/excluded-addresses)
{% endcontent-ref %}

### Max amount per wallet

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FD9R739bIXKUXsr5fpwHq%2Fimage.png?alt=media&amp;token=0f73f63e-6ba6-494c-b02d-eb1985ed9d74" alt=""><figcaption></figcaption></figure>

This feature restricts the maximum amount of tokens each address can hold by preventing them from buying more tokens or receiving them from others once they reach the limit.

This helps prevent whale accumulation and promotes more distributed token ownership.

Check the addresses that are **excluded from "Max amount per wallet"** by default:

{% content-ref url="/pages/GB9dXegxdEOF6xMcRT3T" %}
[Excluded addresses](/features/excluded-addresses)
{% endcontent-ref %}

### Max transaction limits

Max transaction limits block transactions from users who exceed the specified limit, causing their transactions to revert with an error.

#### Default Exchange: Disabled

When default exchange is turned off, this feature allows you to specify a limit that affects all types of transactions made with the token. Some addresses are excluded from this limit by default.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FcTKJ2uVIrru7Qs3Ws3hI%2Fimage.png?alt=media&amp;token=409f5e33-36c8-491f-baaa-feaf5be1785b" alt=""><figcaption></figcaption></figure>

#### Default Exchange: Enabled

When default exchange is enabled, Max transaction limits provide more configuration options. Because your token smart contract can now connect with a DEX, you can specify exact limits for each transaction type:

* **Buys**: Buying tokens on the selected default exchange
* **Sells**: Selling tokens on the selected default exchange
* **Transfers**: All other token transactions

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2F2Z5dAgKUfePRIiZ0GTOF%2Fimage.png?alt=media&amp;token=3c21b830-ecf1-467c-887e-2867b8c2bba1" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**Important:** You cannot add new limit types after deployment. For example, if you create a token with only max buy limits, you cannot add max sell and max transfer limits later.
{% endhint %}

#### Adding Other Exchanges

If you want to add liquidity to other exchanges, you can add other pair smart contracts using the setAMM() function in your token owner dashboard after deployment.

Check the addresses that are **excluded from "Max transaction limits"** by default:

{% content-ref url="/pages/GB9dXegxdEOF6xMcRT3T" %}
[Excluded addresses](/features/excluded-addresses)
{% endcontent-ref %}

### Pausable

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FyRpR161VXZDapbuwcg5W%2Fimage.png?alt=media&amp;token=776880a5-d211-4b5b-b6c7-66486d41d1b5" alt=""><figcaption></figcaption></figure>

The Pausable feature includes 2 owner-restricted functions: pause() and unpause(). Enabling this feature allows the owner to freeze all balances and pause all transactions (including the owner's own transactions). During a pause, NO ONE can move tokens from their address or receive them.

This is useful for emergency situations or when you need to temporarily halt all token activity.

### Blacklist

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FqhwNJZoYegSzwac6Mfm3%2Fimage.png?alt=media&amp;token=34d91c5c-dbdc-4edf-a5a9-a17aa3ccd33f" alt=""><figcaption></figcaption></figure>

The Blacklist feature adds an owner-restricted blacklist() function, which allows the owner to freeze specific addresses. Blacklisted addresses cannot send or receive tokens until they are removed from the blacklist (unblacklisted).

This feature is useful for preventing malicious actors from interacting with your token.

### Token recovery

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2F9b4nm0Kiy8jqfXPUqgDt%2Fimage.png?alt=media&amp;token=588a4ba3-94b4-4ed4-a3b7-6b50e02088ef" alt=""><figcaption></figcaption></figure>

Token recovery adds owner-restricted functions: recoverForeignERC20() and recoverToken(). Using these functions, the owner can retrieve stuck tokens from the token smart contract balance.

We recommend always keeping this feature enabled in your token in case someone accidentally sends tokens to your contract address.

### Permit

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FfTsSxVwI24uxBYUUh6n8%2Fimage.png?alt=media&amp;token=98466b93-7959-4789-9138-5c6fa876ac1e" alt=""><figcaption></figcaption></figure>

The Permit function (ERC-2612) adds an option for gasless approvals, allowing token holders to approve their tokens by simply signing a message from their wallet. This message can later be executed in the Permit function to approve the tokens by any address or smart contract.

This improves user experience by eliminating the need for a separate approval transaction that costs gas.


# Taxes

Features available in "Taxes" section in 20lab token generator for ERC-20 tokens.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2Ff1imDfoIcF8N2evIQZK0%2Fimage.png?alt=media&amp;token=8ef606d8-8966-48ad-b792-0154d3aab127" alt=""><figcaption></figcaption></figure>

### Default exchange

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2F9sVhiBdh6eebWGRXCwvZ%2Fimage.png?alt=media&amp;token=3b1c1f8a-6fb8-47b7-8abe-734656987d7e" alt=""><figcaption></figcaption></figure>

Default exchange allows you to choose which DEX (decentralized exchange) your token smart contract will be connected to.

While it doesn't add important functionality by itself, it unlocks many more features in the token generator. All features that require DEX connectivity need this connection to work properly. For example, the Anti-bot cooldown feature requires a DEX connection to track the buys and sells of each address and apply cooldowns accordingly.

{% hint style="info" %}
**Note:** Each blockchain has different DEXes available. After connecting your wallet, you will see the available options to choose from.
{% endhint %}

### Liquidity tax

Liquidity tax allows you to take transaction fees and automatically add them to the main liquidity pool on your default exchange.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FeOZwMpvRGVCLIR8UbdoL%2Fimage.png?alt=media&amp;token=865642de-4a5e-473f-b7dd-a00f5db7a3aa" alt=""><figcaption></figcaption></figure>

#### How It Works

Liquidity tax works like wallet tax, but the recipient is always the liquidity pool on your default exchange that was automatically created during token deployment. The pair receiving liquidity is always (Your token)/(Native coin). For example, on BNB Smart Chain, it will be (Your token)/BNB.

LP tokens minted by the DEX as a result of adding liquidity are permanently burned, making this part of the liquidity irremovable forever.

#### Transaction Types

Because your token will be connected to your default exchange, you can specify different rates for:

* **Buys**: Buying tokens on the selected default exchange
* **Sells**: Selling tokens on the selected default exchange
* **Transfers**: All other transactions

#### Swap Threshold Required

Liquidity tax requires a swap threshold to work. It needs to swap collected tokens to native coins (e.g., BNB) before adding both your token and the obtained native coins to the liquidity pool. Check more information about swap threshold here:

{% content-ref url="/pages/p2dLh7uG7TiLgmK8Gz1y" %}
[Swap threshold ratio](/features/swap-threshold-ratio)
{% endcontent-ref %}

Check the addresses that are **excluded from fees** by default:

{% content-ref url="/pages/GB9dXegxdEOF6xMcRT3T" %}
[Excluded addresses](/features/excluded-addresses)
{% endcontent-ref %}

### Dividend tax

Dividend tax allows you to take transaction fees and distribute them back to token holders based on their holdings. Dividends are distributed proportionally - a holder with twice as many tokens will receive twice as many dividends.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FUmwslzMhFJIvAjOQvgZn%2Fimage.png?alt=media&amp;token=484e36b2-378b-4783-88ff-5bd5a941a501" alt=""><figcaption></figcaption></figure>

Dividend tax provides lots of configuration, allowing you to personalize it for your needs.

#### Dividend Currency

In the "Dividends sent in" field, you need to choose which currency holders will receive as dividends - either native coin or a custom token.

{% hint style="warning" %}
**Important:** Dividend currency cannot be changed later!
{% endhint %}

#### Callback Gas Limit (Native Coin Only)

If you choose native coin, you can also adjust the default callback gas limit used for auto-claiming dividends.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2F2njdGhSjQGIfXIqxQFra%2Fimage.png?alt=media&amp;token=55883758-a09a-4b23-bcf2-dfe977fc4e9a" alt=""><figcaption></figcaption></figure>

Increasing the callback gas limit is rarely necessary unless you want to support auto-claiming by smart contracts that need more gas to receive dividends. This might be needed if many holders use on-chain multi-signature wallets like GnosisSafe. In such cases, increasing it to around 7,000 might help, but this means fewer holders will receive dividends in each distribution cycle.

{% hint style="info" %}
**Note:** If smart contracts still can't receive auto-dividends, they can manually claim them at any time.
{% endhint %}

#### Transaction Types

You can specify different dividend tax rates for:

* **Buys**: Buying tokens on the selected default exchange
* **Sells**: Selling tokens on the selected default exchange
* **Transfers**: All other transactions

#### Dividend Eligibility

The "Dividend eligibility amount" determines how many tokens each holder must have to qualify for dividends. Holders with less than this amount will never receive dividends.

{% hint style="warning" %}
**Important:** The dividend eligibility amount cannot be changed later!
{% endhint %}

#### Auto-Distribution Settings

Two settings control automatic dividend distribution:

1. **Auto-claim interval**: How often dividends are automatically distributed
2. **Gas for auto-claims**: Amount of gas used for automatic distribution

Since every blockchain transaction costs gas, the token smart contract uses a "lazy" distribution method. It takes additional gas from each transaction to distribute as many pending dividends as possible.

* **Higher interval**: Dividends sent less frequently, but holders save gas
* **Lower interval**: Dividends sent more frequently, but at higher gas cost

{% hint style="info" %}
**Note:** Holders can always claim pending dividends immediately using the claim() function.
{% endhint %}

#### Swap Threshold Required

Dividend tax requires a swap threshold to work. It swaps accumulated tokens to the chosen dividend currency before sending them to the dividend tracker contract for distribution. Check more information about swap threshold here:

{% content-ref url="/pages/p2dLh7uG7TiLgmK8Gz1y" %}
[Swap threshold ratio](/features/swap-threshold-ratio)
{% endcontent-ref %}

Check the addresses that are **excluded from fees** & **receiving dividends** by default:

{% content-ref url="/pages/GB9dXegxdEOF6xMcRT3T" %}
[Excluded addresses](/features/excluded-addresses)
{% endcontent-ref %}

### Wallet taxes

Wallet tax allows you to take transaction fees and send the collected tokens to a specified address.

#### Default Exchange: Disabled

When default exchange is disabled, wallet tax applies to every transaction type. For example, if someone buys 100 tokens and your wallet tax is 2%, the user receives 98 tokens and the remaining 2 tokens are immediately transferred to the wallet tax recipient.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FaGkzn5WtkWN2gN5ATJBe%2Fimage.png?alt=media&amp;token=45ff671b-b677-409b-bcee-47f048e1522f" alt=""><figcaption></figcaption></figure>

#### Default Exchange: Enabled

When default exchange is enabled, wallet tax provides additional configuration options for tax charging and the currency in which fees are sent to the recipient.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2F20HaqotXdt8Xajb9xe3g%2Fimage.png?alt=media&amp;token=af1b2bb2-ebc7-4f97-9115-fc35bb5b6e0c" alt=""><figcaption></figcaption></figure>

You can specify different rates for:

* **Buys**: Buying tokens on the selected default exchange
* **Sells**: Selling tokens on the selected default exchange
* **Transfers**: All other transactions

{% hint style="warning" %}
**Important:** Wallet tax name and receiving currency cannot be changed later!
{% endhint %}

#### Currency Conversion

If the wallet tax is sent in a currency other than your token, your smart contract will perform an internal swap. It converts the collected tokens into the desired currency before sending them to the tax recipient's address. When wallet tax is sent in a different currency, the swap threshold controls how often these swaps occur. Check more information about swap threshold here:

{% content-ref url="/pages/p2dLh7uG7TiLgmK8Gz1y" %}
[Swap threshold ratio](/features/swap-threshold-ratio)
{% endcontent-ref %}

Check the addresses that are **excluded from fees** by default:

{% content-ref url="/pages/GB9dXegxdEOF6xMcRT3T" %}
[Excluded addresses](/features/excluded-addresses)
{% endcontent-ref %}

### Auto-burn tax

Auto-burn tax allows you to take transaction fees and burn them permanently using the \_burn() function, reducing the total token supply.

#### Default Exchange: Disabled

When default exchange is disabled, auto-burn tax applies to every transaction. For example, if someone buys 100 tokens and your auto-burn tax is 2%, the user receives 98 tokens and the remaining 2 tokens are immediately burned.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FDlxexxi4CDSBtx9S6WVL%2Fimage.png?alt=media&amp;token=fabe53b0-8bc2-4867-8efc-dfb1967c4a37" alt=""><figcaption></figcaption></figure>

#### Default Exchange: Enabled

When default exchange is enabled, auto-burn tax provides additional configuration options for different transaction types:

* **Buys**: Buying tokens on the selected default exchange
* **Sells**: Selling tokens on the selected default exchange
* **Transfers**: All other transactions

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FeWULB6PU8lVqv6XWszRG%2Fimage.png?alt=media&amp;token=bf2998c1-5d93-4021-adc2-1ded33d09385" alt=""><figcaption></figcaption></figure>

#### Immediate Burning

Regardless of your default exchange setting, auto-burn is always immediate - it happens in the same transaction as the original transfer.

Check the addresses that are **excluded from fees** by default:

{% content-ref url="/pages/GB9dXegxdEOF6xMcRT3T" %}
[Excluded addresses](/features/excluded-addresses)
{% endcontent-ref %}


# Swap threshold ratio

Learn how the swap threshold ratio works for ERC-20 tokens created on 20lab.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FL7ZKoaDaiavZDs2AdA41%2Fimage.png?alt=media&amp;token=265f2978-c303-484f-b11f-9b2e9a8c620b" alt=""><figcaption></figcaption></figure>

### What is Swap Threshold Ratio?

The swap threshold ratio in tokens created on [20lab.app](https://20lab.app/) represents the percentage of available liquidity on the main DEX pair that must be collected from taxes before the token smart contract can swap these accumulated fees and send them to the appropriate locations.

### When Does It Apply?

The swap threshold ratio is effective when you select one or more of the following tax types:

* **Wallet taxes** sent in native coins (e.g., BNB) or custom tokens (e.g., USDT)
* **Liquidity tax**
* **Dividend tax**

### How It Works

#### Step 1: Tax Collection

When the above taxes are charged (on buys, sells, and/or transfers), they are first sent to the token's smart contract balance, which you can see in the Block Explorer.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FNrEhJRDvB3rCj1ZhCVH0%2Fimage.png?alt=media&amp;token=84cb4660-d587-4dd2-a25b-48f3c9364a17" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**Important:** Tokens transferred directly to the token smart contract (e.g., using the transfer() function) don't count towards the swap threshold.
{% endhint %}

#### Step 2: Threshold Check

Once the amount of tokens in the token's smart contract balance exceeds the swap threshold, the taxes will be swapped. The swapping process takes the appropriate amounts from the token's smart contract balance and **uses your main liquidity pool on your default exchange** to swap and send the taxes where they should go.

### Why Use a Threshold?

There are two important reasons for this delay:

#### 1. Gas Efficiency

This saves users money on gas fees. If swaps occurred with every transaction, the gas cost for the swap could be greater than the actual value of the taxes, essentially burning users' money.

#### 2. Technical Limitation

Buy transactions cannot trigger swaps - this is a DEX limitation that cannot be changed on the token smart contract side. The token smart contract must wait for a sell or transfer transaction to trigger the swap.

### Recommended Setting

The automatic and safest value for the swap threshold ratio is **0.5% of available liquidity.**

### Practical Example

Let's see how this works with a real example:

#### Initial Setup

* **Your liquidity pool**: 500,000 tokens + 5 BNB
* **Your swap threshold ratio**: 0.5%
* **Your swap threshold**: 500,000 × 0.5% = 2,500 tokens
* **Liquidity tax rates**: 2% (buys), 2% (sells), 0% (transfers)
* **Dividend tax rates**: 2% (buys), 2% (sells), 0% (transfers)

#### How It Works in Practice

With this configuration, your swap threshold is 2,500 tokens. This value will change every time someone buys or sells your token, but it will scale proportionally to the available liquidity.

**Current situation**: 2,000 tokens already collected from taxes and sitting in the token smart contract.

#### Scenario 1: Buy Transaction

If the next transaction is a **buy** of 50,000 tokens:

* 2,000 tokens will be collected from that transaction (4% total tax rate)
* **No swaps will be triggered** because buy transactions can't trigger swaps
* Total accumulated tokens: 4,000 tokens

#### Scenario 2: Sell Transaction

If the next transaction is a **sell** of 50,000 tokens:

* 2,000 tokens are first collected and transferred to the token contract
* Total accumulated tokens: 4,000 tokens (exceeds the 2,500 threshold)
* **Swaps are triggered** in the same transaction:
  * 2,000 tokens used for liquidity tax
  * 2,000 tokens used for dividend tax
* After completion: No or almost no tokens left in the token smart contract balance

#### Next Cycle

The next collection cycle will then begin to accumulate the required number of tokens for the next swap.

### Key Points to Remember

* Threshold scales with your liquidity pool size
* Only sell and transfer transactions can trigger swaps
* Buy transactions only collect taxes but cannot trigger swaps
* The system is designed to save gas costs for your token holders
* Swaps happen automatically when the threshold is reached


# Excluded addresses

Find addresses that are excluded (whitelisted) from certain features in the ERC-20 token creation process.

### Excluded from limits

If your token has any of the following features:

* **Max amount per wallet**
* **Max transaction limits**
* **Anti-bot cooldown**

Then by default, some addresses are excluded from these limits altogether:

#### Always Excluded:

* **Supply recipient**: The address that receives initial tokens
* **Token smart contract**: Your token's contract address
* **0x0 (burn) address**: The address used for burning tokens

#### Conditionally Excluded:

* **RouterV2 and PairV2 smart contracts**: If you enabled default exchange
* **Wallet tax recipient addresses**: If you have wallet taxes configured

#### What This Means:

Addresses excluded from limits can:

* Hold unlimited tokens
* Make unlimited token transactions
* Will not be temporarily frozen by anti-bot cooldown after buying or selling

### Excluded from trading restriction

If your token has the following feature:

* **EnableTrading function**

Then by default, some addresses are excluded from this restriction:

* **Supply recipient**: The address that receives initial tokens
* **Token smart contract**: Your token's contract address

#### What This Means:

Addresses excluded from trading restrictions can interact with the DEX before trading is enabled for everyone by the owner. These exclusions will have no effect once the owner calls the enableTrading() function.

### Excluded from fees

If your token has any of the following features:

* **Wallet taxes**
* **Auto-burn tax**
* **Liquidity tax**
* **Dividend tax**

Then by default, some addresses are excluded from paying any fees:

#### Always Excluded:

* **Supply recipient**: The address that receives initial tokens
* **Token smart contract**: Your token's contract address

#### Conditionally Excluded:

* **Wallet tax recipient addresses**: If you have wallet taxes configured

#### What This Means:

Addresses excluded from fees can buy, sell, and transfer without being charged any taxes.

{% hint style="info" %}
**Note:** The token smart contract requires both the sender and recipient of each transaction to be included in fee payments in order to charge the fee.
{% endhint %}

### Excluded from dividends

If your token has the following feature:

* **Dividend tax**

Then by default, some addresses are excluded from receiving any dividends for holding tokens:

* **Supply recipient**: The address that receives initial tokens
* **Token smart contract**: Your token's contract address
* **RouterV2 and PairV2 smart contracts**: DEX contract addresses
* **Dividend tracker contract**: The contract that manages dividend distribution

#### What This Means:

Even if an excluded address has enough tokens to meet the criteria (such as the minimum number of tokens required to receive dividends), it will not receive any dividends because the exclusion has higher priority.

### AMM contracts

If your token has the following feature:

* **Default exchange**

Then by default, some addresses are added as AMM contracts (also known as DEX contracts) that your token will recognize for transaction type checking:

* **RouterV2 contract**: The exchange's router contract
* **PairV2 contract**: Your token's liquidity pair contract

#### How AMM Recognition Works:

**Automatic Exclusions**: By adding a contract to this list, your token will automatically exclude it from limits and dividends (if applicable).

**Transaction Type Detection**: Your token uses the AMM list to determine the type of transaction for features that depend on transaction types, such as:

* **Buy**: Trading native coins/tokens for your token
* **Sell**: Trading your token for native coins/other tokens
* **Transfer**: All other token movements

**Internal DEX Transfers**: By marking multiple contracts as AMM contracts of the same DEX, your token will treat transfers between them not as regular transfers, but as internal DEX transfers. This ensures that features like EnableTrading function and Anti-bot cooldown are handled and enforced correctly.

{% hint style="warning" %}
**Important:** Your main liquidity pool (PairV2) and RouterV2 cannot be removed from this list.
{% endhint %}

### Why These Exclusions Exist

These automatic exclusions are designed to:

1. **Prevent system conflicts**: Ensure DEX contracts can function properly
2. **Maintain liquidity**: Allow essential addresses to operate without restrictions
3. **Enable proper fee collection**: Ensure tax systems work as intended
4. **Support project operations**: Allow project addresses to manage tokens effectively

Understanding these exclusions helps you plan your token's behavior and ensures your features work as expected.


# Unchangeable ERC-20 values

Review the list of unchangeable token features and values after creating your ERC-20 token.

### Understanding ERC-20 Token Immutability

Any features you select during the token generation phase will be permanently added to the smart contract code. This is an important aspect of blockchain technology that ensures transparency and trust. Some of these features have parameters that can be modified later by the owner's wallet, but others are completely immutable once your token is deployed.

Make sure you carefully consider these settings before deploying your token, as they will be permanent for the entire lifetime of your token.

### Completely Unchangeable Values

Here are all the values that cannot be changed after your token is created (**even by a token owner**):

#### General Token Properties

* **Blockchain**: The network your token is deployed on (Ethereum, BSC, Polygon, etc.)
* **Token name**: The full name of your token (e.g., "My Project Token")
* **Token symbol**: The ticker symbol for your token (e.g., "MPT")
* **Contract name**: The identifier for your smart contract
* **Decimals**: The number of decimal places your token supports (affects how divisible your token is)
* **Total supply**: The maximum number of tokens that can ever exist (unless Mintable feature is enabled)
* **Mintable - "Max supply"**: The maximum limit for mintable tokens when mintable feature is enabled

#### Optional Features

* **Default exchange & Auto-created main LP**: The primary exchange and main liquidity pool smart contract
* **Max transaction limit types**: You cannot add new types of transaction limits after deployment

#### Tax Configuration

* **Default exchange & Auto-created main LP**: The primary exchange and main liquidity pool smart contract
* **Dividend tax - "Dividends sent in"**: The token type used for dividend distributions
* **Dividend tax - "Dividend eligibility amount"**: The minimum token amount required to receive dividends
* **Wallet taxes - "Tax names"**: The names assigned to specific wallet tax categories
* **Wallet taxes - "Wallet taxes sent in"**: The token type used for wallet tax distributions

### What Can Still Be Changed

The rest of the token values can be modified later by the owner within the same or similar limits as available in the generator. This includes adjustable parameters like tax rates, transaction limits, and other configurable features that were designed to be flexible.


# Same-address tokens

Learn how to create ERC-20 tokens with the same address on different blockchains using 20lab.

### What Are Same-Address Tokens?

If you want to have a cross-chain token (two separate token smart contracts connected by a bridge), it is sometimes important to keep the same addresses for both. This can have benefits such as:

* Easier bridge setup
* Proof to users that it is the same token across chains
* Simplified integration for wallets and exchanges

### How It Works

We've enabled this feature by using a hybrid contract initialization approach. Instead of only using the constructor in the token smart contract, we also include an initializer - a public function that can be run only once to set up the core functionality of the token.

Although this method isn't mandatory when users deploy tokens directly from their wallet, it's necessary in our case. We use the CREATE2 opcode to maintain the same token address even if some parameters are changed in the bytecode.

## Prerequisites

{% hint style="warning" %}
**These requirements must be met to obtain same-address tokens:**

1. Both tokens must be generated using the 20lab generator v. 1.6.0 or higher.
2. Both tokens must be generated with **EXACTLY THE SAME** parameters, except for:

   * **Default exchange**: Only the "Token integration template" must be the same (see [supported exchanges documentation](https://docs.20lab.app/decentralized-exchanges/supported-exchanges))
   * **Custom token for wallet taxes**: Can be different between chains
   * **Custom token for dividends**: Can be different between chains

   The above 3 parameters can be different in both tokens and won't affect the token address in any way.
   {% endhint %}

{% hint style="info" %}
Both tokens should ideally be generated using the same generator version, but this is not mandatory - in many cases, different generator versions can still produce the same addresses.
{% endhint %}

### Step-by-Step Process

#### Step 1: Deploy Your First Token

Deploy the first token on [20lab.app](https://20lab.app/) by choosing your features, compiling it, and creating it on the first blockchain where you want it to exist.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FaeXB47pZfJWOfTpjjIM8%2Fimage.png?alt=media&amp;token=094bcbe2-5c72-471c-9829-2e709c62105a" alt=""><figcaption></figcaption></figure>

#### Step 2: Modify Address (Optional)

After compilation, you can optionally change the address by modifying the salt or searching for a desired pattern in the token address.

#### Step 3: Get Creation Details

After successful deployment, go to your dashboard and you will see an info icon below your token address. Click on it to see the creation details.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FOWZfCjqESMaGJ0uva7Sn%2FOnPaste.20240314-124758.png?alt=media&amp;token=bd7db33d-6df2-4975-abc9-a8a493c18db6" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FfIpryYFntAD1QXoP3fbW%2Fimage.png?alt=media&amp;token=202cffec-c5f0-4756-a008-b2130e68c646" alt=""><figcaption></figcaption></figure>

#### Step 4: Copy the Salt

Copy and save the "Salt" value from the creation details. You'll need this for your second token.

### Creating the Second Token

#### Step 1: Start Second Token Creation

Begin creating the second token on a different blockchain.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FoieUYrUgOZTce8kmo75O%2Fimage.png?alt=media&amp;token=34183d5f-0ec9-4515-af50-5d131a56716a" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**Important:** Keep all the parameters exactly the same as in the first token, because all of them will affect the address of your next token (with the few exceptions listed in the Prerequisites section).
{% endhint %}

This is intentional behavior to prevent others from creating another token at the same address as yours. Because the parameters must be identical, no one can insert their own owner address or add a recipient - this would change the token address completely.

#### Step 2: Validate and Use Salt

Validate your token configuration and select the 'Modify by salt' option.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FQlYf1CILKvds2DvTLotS%2Fimage.png?alt=media&amp;token=dfb84238-9867-45c7-92e0-c7d8982f53d7" alt=""><figcaption></figcaption></figure>

Paste the copied salt from your first token and check if your token address matches the first token's address.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FawiwzHezp2rn2uSNYF5k%2Fimage.png?alt=media&amp;token=096502b2-a21b-4696-b487-b1ba09a3fe53" alt=""><figcaption></figcaption></figure>

If you haven't changed any parameters other than the allowed exceptions, your second token address should be exactly the same as the first one.

#### Step 3: Deploy the Second Token

Deploy your second token with the matching address.

## Success! 👏

You now have both tokens with the same address on two different blockchains.

**Example of successful same-address deployment:**

* Ethereum Goerli: [`0x8960b7E3912B4eb03d8195aC1F0Db9Fdb6B17827`](https://goerli.etherscan.io/token/0x8960b7E3912B4eb03d8195aC1F0Db9Fdb6B17827)&#x20;
* BSC Testnet: [`0x8960b7E3912B4eb03d8195aC1F0Db9Fdb6B17827`](https://testnet.bscscan.com/token/0x8960b7E3912B4eb03d8195aC1F0Db9Fdb6B17827)

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2F0vJSxCXcf4dr41IfWqB2%2FBez%20nazwy%20(2).png?alt=media&amp;token=3d42e74d-98bc-46f4-ad23-ff170dc96855" alt=""><figcaption></figcaption></figure>

### Important Security Notes

* **Parameter Verification**: Always double-check that your parameters match exactly (except for the allowed exceptions)
* **Address Validation**: Always verify the address matches before deploying the second token
* **Bridge Setup**: Having the same address simplifies bridge configuration but doesn't automatically create the bridge connection

### Troubleshooting

**If addresses don't match:**

1. Verify all parameters are identical (except allowed exceptions)
2. Check that you're using the correct salt
3. Ensure you're using generator v. 1.6.0 or higher
4. Review that the token integration template for your Default Exchange is the same for both tokens


# General

Features available in "General" section in 20lab token generator for SPL tokens.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2F2NMLuQ7sLorPvjYQ6SoR%2Fimage.png?alt=media&amp;token=cf80951c-3300-41ec-9ffb-0c2943f6cfb2" alt=""><figcaption></figcaption></figure>

### Blockchain

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FbdLlioCx7VaZHvOdzilB%2Fimage.png?alt=media&amp;token=e86f9de9-4c42-4710-8f4c-574ee794ea9f" alt=""><figcaption></figcaption></figure>

The blockchain field shows you which Solana blockchain you are currently connected to in your Web3 wallet among supported networks on [20lab.app](https://20lab.app/). For example, if you are connected to Solana Mainnet, it will be displayed in this field. This means that when you create your token, it will be deployed on that specific Solana network.

**Available Solana Networks:**

* **Mainnet**: The live Solana network for production tokens
* **Testnet**: For testing purposes before mainnet deployment
* **Devnet**: For development and experimentation

### Token name & Token symbol

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2F5UJ2nz0Gz7I6jKEdnGAV%2Fimage.png?alt=media&amp;token=b29ea4a3-c8cd-4cc3-b92d-01e9871e5d61" alt=""><figcaption></figcaption></figure>

#### Token Name

The token name field allows you to specify the full name of your token, which will be publicly visible after creation. This is the complete, descriptive name of your project (e.g., "My Solana Project Token").

#### Token Symbol

The token symbol is a shorter version of the name that is usually used to identify the token on exchanges, wallets, and other platforms. It's typically 3-5 characters long (e.g., "MSPT").

{% hint style="info" %}
**Note:** On Solana, both name and symbol can be changed after token creation if you maintain metadata update authority.
{% endhint %}

### Decimals

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2F5N8tMkFnYUgFIfwvZEB7%2Fimage.png?alt=media&amp;token=2958417e-b444-4da7-b618-01c662eca2ec" alt=""><figcaption></figcaption></figure>

Decimals determine how many decimal places your token can be divided into. On Solana, this ranges from 0 to 9 decimal places.

#### Recommended Values

The most common values for Solana tokens are 6 or 9 decimals, and we recommend choosing one of these:

**9 Decimals (Recommended for most tokens):**

* Similar to SOL's native decimals
* Allows for very precise fractional amounts
* Standard for most fungible tokens
* Example: 1.000000001 tokens

**6 Decimals (Recommended for stablecoins):**

* Similar to USDC and other stablecoins
* Good balance between precision and simplicity
* Example: 1.000001 tokens

**0 Decimals (For NFT-like tokens):**

* Tokens can only exist as whole numbers
* Useful for collectibles or voting tokens
* Example: 1, 2, 3 tokens (no fractions)

#### Supply Limitation

The more decimal places you choose, the lower the maximum initial supply can be. This is due to Solana's technical limitations:

* **9 decimals**: Maximum supply ≈ 18.4 quintillion tokens
* **6 decimals**: Maximum supply ≈ 18.4 trillion tokens
* **0 decimals**: Maximum supply ≈ 18.4 billion tokens

{% hint style="warning" %}
**Important:** Decimals cannot be changed later!
{% endhint %}

### Initial supply

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2Flvd87HBnXtfO6NNEaNt7%2Fimage.png?alt=media&amp;token=abd87622-1d5e-47f2-8d6f-27e2c394f912" alt=""><figcaption></figcaption></figure>

Initial supply is the amount of tokens that will be minted at creation and sent to the selected address called the "supply recipient".

#### How It Works

If you don't select the "Mintable" feature for your token, the initial supply automatically becomes the total supply with no possibility to increase it after deployment.

#### Supply Calculations

The maximum value for the initial supply is based on the number of decimals you choose. For each decimal point less, you can add one zero to your initial supply:

**Examples:**

* **9 decimals**: Up to 18,400,000,000 tokens
* **6 decimals**: Up to 18,400,000,000,000 tokens
* **3 decimals**: Up to 18,400,000,000,000,000 tokens
* **0 decimals**: Up to 18,400,000,000,000,000,000 tokens

### Supply recipient

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FUENwnhjXPtBOecw9gh92%2Fimage.png?alt=media&amp;token=077c2a37-a499-4739-9f61-0d51316befac" alt=""><figcaption></figcaption></figure>

The supply recipient is the wallet address that will receive the initial supply of tokens after the token is created.

#### Default Setting

By default, this is the same address as your currently connected wallet. This means all initial tokens will be sent to the wallet you're using to create the token.

#### Different Supply Recipient

You can enable the "Different supply recipient" option if you want the initial supply to be sent to a different address instead of your connected wallet.


# Optional

Features available in "Optional" section in 20lab token generator for SPL tokens.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FpxnDDHEPeS42OmTl4zuR%2Fimage.png?alt=media&amp;token=f5880cb1-f3cf-4401-9e68-75efb89e02cc" alt=""><figcaption></figcaption></figure>

### Mintable

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FKxxgaqDu9GqgV7x1PDTY%2Fimage.png?alt=media&amp;token=a3f422fd-024e-412d-9014-a3b0cb9e0e66" alt=""><figcaption></figcaption></figure>

This feature determines whether you want to retain the minting authority or revoke it immediately after token creation.

#### How It Works

With minting authority, you can mint new tokens to any address of your choice. This function does not have a maximum cap, which means minting can be done continuously as long as the authority is not revoked.

#### Revocation

Once you revoke mint authority, no new tokens can ever be created. This makes your token's supply permanently fixed.

### Non-transferable

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2F8CApdR6l8ngglpCF2Hhf%2Fimage.png?alt=media&amp;token=893e8177-6e3e-4199-a9c9-76bbf0e2e8e3" alt=""><figcaption></figcaption></figure>

Non-transferable tokens are part of the Token-2022 extension program on Solana. This feature allows you to create tokens that cannot be transferred after being received through minting.

#### How It Works

* **Minting only**: Tokens can only be received through minting
* **No transfers**: Holders cannot send tokens to other addresses
* **Burning allowed**: Each holder can burn their own tokens
* **Requires mintable**: This feature requires the Mintable function to be enabled

{% hint style="warning" %}

#### Important Warnings

* **Permanent feature**: Once enabled, this cannot be disabled
* **Not tradeable**: These tokens cannot be bought or sold
* **Limited utility**: Consider if this fits your project's goals
* **User understanding**: Ensure users know tokens are non-transferable
  {% endhint %}

### Freezable

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2Fbw7TyW9O3MAjXElE6UDB%2Fimage.png?alt=media&amp;token=fb07b86c-a8bb-4171-b7a4-bd20586e7c71" alt=""><figcaption></figcaption></figure>

The Freezable feature is similar to a blacklist function. With freeze authority, you can freeze selected addresses and prevent them from transferring tokens until they are "unfrozen."

#### How It Works

* **Individual control**: Freeze specific wallet addresses
* **Transfer blocking**: Frozen addresses cannot send or receive tokens
* **Reversible**: Frozen addresses can be unfrozen by the freeze authority
* **Authority-based**: Only the freeze authority can freeze/unfreeze addresses

{% hint style="warning" %}
**Important:** Many exchanges require this feature to be revoked before your token can be listed. Be sure to check the listing requirements of exchanges you plan to use.
{% endhint %}

### Transfer tax

Transfer tax from Solana's Token-2022 program is a powerful feature that allows you to charge a specified fee on each transaction.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FFAsOCTBneN1HmqLuRt9N%2Fimage.png?alt=media&amp;token=5fc1b9d7-2164-4a66-85d5-e57dcf5baccf" alt=""><figcaption></figcaption></figure>

#### Basic Configuration

You need to configure two main settings: the tax rate (percentage of tokens charged for each transaction) and the maximum fee per transaction (which caps how much tax someone pays regardless of transaction size).

**Example:** With a 5% tax rate and 40,000 token max fee, a 1,000,000 token transfer would normally cost 50,000 tokens in tax, but gets capped at 40,000 tokens. This benefits larger transactions since they pay less than the standard percentage once they hit the cap. Setting the max fee to 0 turns off the tax completely.

#### Authority Management

Transfer tax introduces two important authorities. The **Config Authority** can modify tax rates and max fees, but changes take about 4 days to take effect, giving users time to react to changes. The **Withdraw Authority** can withdraw accumulated taxes from holder accounts, and our dashboard automatically finds and withdraws pending fees when needed.

#### Operating Modes

You can operate in **Wallet Tax Mode** where the withdraw authority collects accumulated taxes for project use, or **Auto-Burn Mode** where you revoke withdraw authority while keeping tax rates above 0%, effectively burning all collected fees and creating a deflationary mechanism.

#### Use Cases and Planning

Transfer tax is useful for revenue generation, deflationary mechanics, trading fees, or governance funding. When planning, consider how fees affect user experience and adoption, research tax rates used by similar projects, plan authority distribution carefully, decide between revenue collection and deflationary models, and clearly communicate tax mechanics to your community.


# Metadata

Features available in Metadata section in 20lab token generator for SPL tokens.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2F1hm6sTBb8JlJ6c6CRBDD%2Fimage.png?alt=media&amp;token=ec22d9bb-502d-4f21-900e-051c8e0c47bb" alt=""><figcaption></figcaption></figure>

### Token logo

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FNP0ZiavszNjSE7TtyhEy%2Fimage.png?alt=media&amp;token=16809b5e-22b5-45fe-ba2a-7d0bc20eee0e" alt=""><figcaption></figcaption></figure>

Your metadata can contain extensive information about your token, with the token logo being one of the most important visual elements. You can easily add a logo using our generator, and both the uploaded image file and all metadata are securely stored on IPFS where they cannot be removed.

#### IPFS Storage Benefits

* **Permanent storage**: Your logo and metadata cannot be deleted or lost
* **Decentralized hosting**: No single point of failure
* **Cost efficiency**: Saves on Solana fees by storing data off-chain
* **Global accessibility**: Available worldwide through IPFS network

#### Technical Requirements

* **Maximum size**: 1 MB
* **Supported formats**: PNG, JPG, or WEBP
* **Recommended format**: Square image (1:1 aspect ratio)

### Token description

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2Fw8fVqUE2dRhTMUk9zj5y%2Fimage.png?alt=media&amp;token=c72ddd85-80a1-4dcc-8ee2-db61a4e1ed62" alt=""><figcaption></figcaption></figure>

The description field allows you to provide detailed information about your token and project. This text appears in wallets, explorers, and other platforms that display token information.

#### What to Include

* **Project purpose**: Clearly explain what your token does
* **Use cases**: Describe how people can use your token
* **Unique features**: Highlight what makes your project special
* **Community information**: Include relevant community details
* **Utility explanation**: Explain the token's role in your ecosystem

### Website & Social links

Add important links to your project that will be publicly included in the metadata file. These links help users find more information about your project and connect with your community.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FZiiXgGjg2qY68FynA9mF%2Fimage.png?alt=media&amp;token=dcde0920-c14d-4fb4-a2e6-977489467c18" alt=""><figcaption></figcaption></figure>

#### Essential Links to Consider

* **Official website**: Your main project website or landing page
* **Documentation**: Links to technical docs or whitepapers
* **Social media**: Twitter, Discord, Telegram, or other community platforms
* **GitHub repository**: For open-source projects or technical transparency
* **Medium/Blog**: For project updates and announcements

### Immutable metadata

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FmuOK8pCPRPFx12KCf56z%2Fimage.png?alt=media&amp;token=099ec4d6-d862-4873-8be2-11256da16e93" alt=""><figcaption></figcaption></figure>

In the 20lab generator, the metadata update authority is assigned to your deployer address by default. This allows you to correct mistakes or update information later through the token owner dashboard. However, if you're confident everything is correct, you can revoke the metadata update authority by setting it as immutable from the start.

{% hint style="warning" %}
**Important:** We recommend that you revoke the metadata update authority when everything is ready, because the metadata in SPL tokens also controls the name and symbol of your token!
{% endhint %}


# Unchangeable SPL values

Review the list of unchangeable token features and values after creating your Solana token.

### Understanding Solana Token Immutability

On Solana, any features you select during the token generation phase will be permanently saved on-chain. This is an important aspect of blockchain technology that ensures transparency and trust. Some of these features can be modified by authority wallets later, but others are completely immutable once your token is deployed.

Make sure you carefully consider these settings before deploying your token, as they will be permanent for the entire lifetime of your token.

### Completely Unchangeable Values

Here are all the values that cannot be changed after your token is created (**even by authority wallets**):

#### General Token Properties

* **Blockchain**: The network your token is deployed on (Solana Mainnet, Testnet, or Devnet)
* **Decimals**: The number of decimal places your token supports (affects how divisible your token is)
* **Total supply**: The maximum number of tokens that can ever exist (unless Mintable feature is enabled and mint authority is not revoked)

#### Optional Features

* **Non-transferable token feature**: Once enabled, this feature cannot be disabled - tokens will remain permanently non-transferable

### What Can Still Be Changed

The rest of the token values can be modified later by authority wallets within the same or similar limits as available in the generator.


# General

Features available in "General" section in 20lab token generator for Sui tokens.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2F2NMLuQ7sLorPvjYQ6SoR%2Fimage.png?alt=media&amp;token=cf80951c-3300-41ec-9ffb-0c2943f6cfb2" alt=""><figcaption></figcaption></figure>

### Blockchain

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FYH2CoEF1tbn9mUXuYUr0%2Fimage.png?alt=media&amp;token=be9995a0-fbd1-49f2-9568-59bdfccd5170" alt=""><figcaption></figcaption></figure>

The blockchain field shows you which Sui blockchain you are currently connected to in your Web3 wallet among supported networks on [20lab.app](https://20lab.app/). For example, if you are connected to Sui Mainnet, it will be displayed in this field. This means that when you create your token, it will be deployed on that specific Sui network.

#### Switching Networks

To switch between Mainnet, Testnet, and Devnet, you will need to change networks directly in your Sui Wallet. The generator will automatically detect and display your current network connection.

**Available Sui Networks:**

* **Mainnet**: The live Sui network for production tokens
* **Testnet**: For testing purposes before mainnet deployment
* **Devnet**: For development and experimentation

### Token name & Token symbol

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2F5UJ2nz0Gz7I6jKEdnGAV%2Fimage.png?alt=media&amp;token=b29ea4a3-c8cd-4cc3-b92d-01e9871e5d61" alt=""><figcaption></figcaption></figure>

#### Token Name

The token name field allows you to specify the full name of your token, which will be publicly visible after creation. This is the complete, descriptive name of your project (e.g., "My Sui Project Token").

#### Token Symbol

The token symbol is a shorter version of the name that is usually used to identify the token on exchanges, wallets, and other platforms. It's typically 3-5 characters long (e.g., "MSPT").

{% hint style="info" %}
**Note**: On Sui, both name and symbol can be changed after token creation if you maintain metadata authority.
{% endhint %}

### Module name

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FrfnmbXAQwBLv106sdNFf%2Fimage.png?alt=media&amp;token=c54a72b3-0d69-49fe-a289-7d036cad5cd7" alt=""><figcaption></figcaption></figure>

The module name is automatically applied in your token's code and is visible at the end of your token address (Sui coin type). It serves as a unique identifier for your token's smart contract module.

#### Naming Requirements

The module name does not have to be the same as your token name. You can choose any name you want as long as it follows the correct syntax:

* **Must start with**: A lowercase letter
* **Can include**: Lowercase letters, numbers, and underscores (\_)
* **Cannot include**: Uppercase letters, spaces, or special characters

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FsZtMqZ1ktTKLNDvjYRv9%2FOnPaste.20241117-100459.png?alt=media&amp;token=e9bcef2c-df04-4dde-bc9d-9d08facb8ede" alt=""><figcaption></figcaption></figure>

#### Auto-Generation Option

If you are not sure which module name to use, you can use the automatically generated value based on your token name. This ensures proper syntax while maintaining relevance to your project.

{% hint style="warning" %}
**Important:** Module name cannot be changed later!
{% endhint %}

### Decimals

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2F5N8tMkFnYUgFIfwvZEB7%2Fimage.png?alt=media&amp;token=2958417e-b444-4da7-b618-01c662eca2ec" alt=""><figcaption></figcaption></figure>

Decimals determine how many decimal places your token can be divided into. On Sui, this ranges from 0 to 9 decimal places.

#### Recommended Values

The most common values for Sui tokens are 6 or 9 decimals, and we recommend choosing one of these:

**9 Decimals (Recommended for most tokens):**

* Similar to SUI's native decimals
* Allows for very precise fractional amounts
* Standard for most fungible tokens
* Example: 1.000000001 tokens

**6 Decimals (Recommended for stablecoins):**

* Similar to USDC and other stablecoins
* Good balance between precision and simplicity
* Example: 1.000001 tokens

**0 Decimals (For NFT-like tokens):**

* Tokens can only exist as whole numbers
* Useful for collectibles or voting tokens
* Example: 1, 2, 3 tokens (no fractions)

#### Supply Limitation

The more decimal places you choose, the lower the maximum initial supply can be. This is due to Sui's technical limitations with large numbers.

{% hint style="warning" %}
**Important:** Decimals cannot be changed later!
{% endhint %}

### Initial supply

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2Flvd87HBnXtfO6NNEaNt7%2Fimage.png?alt=media&amp;token=abd87622-1d5e-47f2-8d6f-27e2c394f912" alt=""><figcaption></figcaption></figure>

Initial supply is the amount of tokens that will be minted at creation and sent to the selected address called the "supply recipient."

#### How It Works

When the treasury cap is removed from your token, the initial supply automatically becomes the total supply with no possibility to increase it later. This creates a fixed-supply token.

#### Supply Calculations

The maximum value of the initial supply is based on the number of decimals you choose. For every decimal point less, you can add one zero to your initial supply:

**Examples:**

* **9 decimals**: Up to 18,400,000,000 tokens
* **6 decimals**: Up to 18,400,000,000,000 tokens
* **3 decimals**: Up to 18,400,000,000,000,000 tokens
* **0 decimals**: Up to 18,400,000,000,000,000,000 tokens

### Supply recipient & Treasury cap holder

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2F5OUv45o4xkwO8Gri5gnl%2Fimage.png?alt=media&amp;token=2ce415d8-3311-4793-908e-51186d0e553b" alt=""><figcaption></figcaption></figure>

#### Supply Recipient

The supply recipient is the wallet address that will receive the initial supply of tokens after the token is created.

**Default Setting:** By default, this is the same address as your currently connected wallet, meaning all initial tokens will be sent to the wallet you're using to create the token.

**Different Supply Recipient Option:** You can enable this option if you want the initial supply to be sent to a different address instead of your connected wallet.

#### Treasury Cap Holder

The treasury cap holder on Sui is the address that can control many of the restricted functions in your token. This includes abilities like minting new tokens, burning tokens, and managing other token authorities.

**Default Setting:** By default, this is the same address as your currently connected wallet.

**Different Treasury Cap Holder Option:** You can enable this option to indicate that the treasury cap should be transferred to a different address after token creation.


# Optional

Features available in "Optional" section in 20lab token generator for Sui tokens.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FpxnDDHEPeS42OmTl4zuR%2Fimage.png?alt=media&amp;token=f5880cb1-f3cf-4401-9e68-75efb89e02cc" alt=""><figcaption></figcaption></figure>

### Mintable

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FIUjvMGScAR0E0USJOHow%2Fimage.png?alt=media&amp;token=df6c757f-4b6b-4ba9-9645-0a8067608423" alt=""><figcaption></figcaption></figure>

"Mintable" functionality is enabled by default for all Sui tokens and allows the treasury cap holder to mint new tokens to any address of their choice.

#### How Mintable Works

Minting on Sui does not have a maximum cap, which means it can be done continuously as long as the treasury cap is not revoked. This provides complete flexibility for token distribution and supply management.

#### Treasury Cap Functions

The treasury cap controls much more than just minting. It manages various important token functions, making it a powerful authority that should be handled carefully.

#### Revoking Mintability

If you don't want your Sui token to be mintable, you can easily revoke the treasury cap after your token is created.

### Freezable

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FV6mHsmKa9PfrWy0lfxm9%2Fimage.png?alt=media&amp;token=f5f177b7-e669-47d7-b0b6-839147485dc5" alt=""><figcaption></figcaption></figure>

Enabling the "Freezable" option creates a new authority for your token called the deny cap. The holder of this authority can freeze (blacklist) any address of their choice.

#### How Freezing Works

Freezing on Sui has a 2-step effect that provides address blocking:

**Step 1 - Immediate Effect:** Immediately after freezing, the token holder cannot interact with their own tokens. This means they cannot send, transfer, or otherwise move tokens from their frozen address.

**Step 2 - Next Epoch Effect:** With the start of the next epoch on the Sui blockchain, the frozen holder won't be able to receive any tokens either. This completes the full isolation of the address.

**Key Point:** The first step effectively blacklists the address and prohibits any tokens from leaving the blacklisted address's balance immediately, providing instant protection when needed.

### Pausable

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FjGeCZt2VsRuVnbEpQVTx%2Fimage.png?alt=media&amp;token=81e433c5-e179-4cfa-b344-1ea51b69f41c" alt=""><figcaption></figcaption></figure>

The "Pausable" feature comes as part of the "Freezable" feature and allows deny cap holders to effectively blacklist everyone by sending just one transaction.

#### How Pausable Works

Pausable has the same effect as manually freezing each individual token holder, but with much greater efficiency. Instead of freezing addresses one by one, a single pause transaction affects all token holders simultaneously.

#### Key Difference from Individual Freezing

After pausing your token, addresses that were previously frozen on an individual basis will be preserved. This means that after unpausing your token, those individually frozen addresses will still remain frozen, while all other addresses will return to normal functionality.


# Metadata

Features available in Metadata section in 20lab token generator for Sui tokens.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2F1hm6sTBb8JlJ6c6CRBDD%2Fimage.png?alt=media&amp;token=ec22d9bb-502d-4f21-900e-051c8e0c47bb" alt=""><figcaption></figcaption></figure>

### Token logo

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FNP0ZiavszNjSE7TtyhEy%2Fimage.png?alt=media&amp;token=16809b5e-22b5-45fe-ba2a-7d0bc20eee0e" alt=""><figcaption></figcaption></figure>

Your metadata can contain extensive information about your token, with the token logo being one of the most important visual elements. You can easily add a professional logo using our generator, and the uploaded image file is securely and permanently stored on IPFS where it cannot be removed.

#### IPFS Storage Benefits

* **Permanent storage**: Your logo cannot be deleted or lost
* **Decentralized hosting**: No single point of failure or central authority
* **Global accessibility**: Available worldwide through the IPFS network
* **Immutable links**: The same content always has the same hash/link
* **Cost efficiency**: No ongoing hosting fees or maintenance required

#### Technical Requirements

* **Maximum size**: 1 MB
* **Supported formats**: PNG, JPG, or WEBP
* **Recommended format**: Square image (1:1 aspect ratio)

### Token description

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2Fw8fVqUE2dRhTMUk9zj5y%2Fimage.png?alt=media&amp;token=c72ddd85-80a1-4dcc-8ee2-db61a4e1ed62" alt=""><figcaption></figcaption></figure>

The description field allows you to provide detailed information about your token and project. This text appears in wallets, explorers, and other platforms that display token information, making it crucial for user understanding and adoption.

#### What to Include in Your Description

**Project Purpose:** Clearly explain what your token does and why it exists. Users should understand your project's core mission within the first sentence.

**Token Utility:** Describe how people can use your token - whether for governance, payments, rewards, staking, or other functions.

**Unique Value Proposition:** Highlight what makes your project special and different from other tokens in the ecosystem.

**Community and Ecosystem:** Include relevant information about your community, partnerships, or ecosystem integrations.

**Technical Information:** Mention any important technical features, such as special tokenomics or innovative mechanisms.

### Immutable metadata

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FtAwWXyINFJBHse5fh51H%2Fimage.png?alt=media&amp;token=c097b353-d21a-44c8-8727-08fd2607d07d" alt=""><figcaption></figcaption></figure>

In the 20lab generator, the metadata authority is assigned to your deployer address by default. This provides flexibility to make corrections or updates later through the token owner dashboard. However, if you're confident everything is correct, you can revoke the metadata authority by setting it as immutable from the start.

{% hint style="warning" %}
**Important:** We recommend that you revoke the metadata authority when everything is ready, because the metadata in Sui tokens also controls the name and symbol of your token!
{% endhint %}


# Unchangeable Sui values

Review the list of unchangeable token features and values after creating your Sui token.

### Understanding Sui Token Immutability

On Sui, any features you select during the token generation phase will be permanently saved on-chain. This is an important aspect of blockchain technology that ensures transparency and trust. Some of these features can be modified by authority wallets later, but others are completely immutable once your token is deployed.

Make sure you carefully consider these settings before deploying your token, as they will be permanent for the entire lifetime of your token.

### Completely Unchangeable Values

Here are all the values that cannot be changed after your token is created (**even by authority wallets**):

#### General Token Properties

* **Blockchain**: The network your token is deployed on (Sui Mainnet, Testnet or Devnet)
* **Module name**: The unique identifier for your token's smart contract module
* **Decimals**: The number of decimal places your token supports (affects how divisible your token is)
* **Total supply**: The maximum number of tokens that can ever exist (only unchangeable if treasury cap is revoked)

## General

* Blockchain
* Module name
* Decimals
* Total supply (If treasury cap is revoked)

### What Can Still Be Changed

The rest of the token values can be modified later by authority wallets within the same or similar limits as available in the generator.


# Verifying source code

This guide shows you how to verify your ERC-20 token generated on 20lab.app on any block explorer.

### What is Verification?

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FFOJvvAy9PfTS4xdk8MzY%2Fimage.png?alt=media&amp;token=e14add12-5723-49c7-bbeb-1939bd168b27" alt=""><figcaption></figcaption></figure>

Verification is a simple process where the complete source code used to build your token is made public. This lets anyone on the internet see what's inside your token: what functions it has, how they work, and confirm that the token is secure.

{% hint style="warning" %}
**Note:** Verification is not available for Testnet tokens.
{% endhint %}

### Step-by-Step Verification Process

To verify an ERC-20 token on a block explorer (e.g. on Bscscan), you need to follow these steps:

1. Go to the [Dashboard page on 20lab.app](https://20lab.app/dashboard/)
2. Locate the token you want to verify in your dashboard

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FeTaN4HEhbWq0GI5EeCQa%2Fimage.png?alt=media&amp;token=8a0f4fcd-2375-4d95-86fb-5e169d36abcb" alt=""><figcaption></figcaption></figure>

3. Click on your token to open it in the dashboard. You'll see the verification panel below the blockchain information.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FducjycVJ4w8cyB9V5rnU%2Fimage.png?alt=media&amp;token=a8d710c4-c91a-4609-9e56-b070449af39b" alt=""><figcaption></figcaption></figure>

4. Select one of the 2 available verification options:

<table><thead><tr><th width="157.33333333333331">Method</th><th>Verify with 20lab label</th><th>Verify with your label</th></tr></thead><tbody><tr><td></td><td>At the top of the verified token, there will be additional information showing that the token was generated on 20lab.</td><td>There will be no mention of 20lab at the top of the verified token. You can put whatever you want there, such as your project information.</td></tr><tr><td>Automatic verification</td><td>Yes </td><td>Yes</td></tr><tr><td>Manual verification</td><td>No</td><td>Yes</td></tr></tbody></table>

{% hint style="info" %}
**Important:** On some blockchains where automatic verification is not supported by block explorers, only manual verification mode is available with the "Verify with your label" option.
{% endhint %}

{% content-ref url="/pages/AbAdxBiVUMqJuD8zSdLu" %}
[Verify with 20lab label](/verification-on-block-explorer/verifying-source-code/verify-with-20lab-label)
{% endcontent-ref %}

{% content-ref url="/pages/mrgrgJEE2BnogMSVz0KV" %}
[Verify with your label](/verification-on-block-explorer/verifying-source-code/verify-with-your-label)
{% endcontent-ref %}

{% content-ref url="/pages/8PRQr2TQMV5VKmyDfVDA" %}
[Manual verification](/verification-on-block-explorer/verifying-source-code/manual-verification)
{% endcontent-ref %}


# Verify with 20lab label

This guide shows you how to complete the verification process for your ERC-20 token generated on 20lab.app using "Verify with 20lab label" option.

### Using the 20lab Label Option

If you choose to verify your token with the 20lab label, click on the button and you will see a pop-up window.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FzEazTrSj6pz7v6riAkEK%2Fimage.png?alt=media&amp;token=3d3025ef-7454-4d0c-a578-94a3930f4e5f" alt=""><figcaption></figcaption></figure>

### Complete the Verification

To complete the verification, click on the "Verify" button and the verification request will be sent to the Block Explorer. After clicking, you should see that the Block Explorer is currently processing your request.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FsgNSjv6y4RxBECgTbs1s%2Fimage.png?alt=media&amp;token=b522428a-1720-4e02-ab7d-a9b691eb69fe" alt=""><figcaption></figcaption></figure>

### Check Your Results

When the verification is finished, the verification bar in your dashboard will turn green and you will be able to see the verified token in the Block Explorer.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2Fhi3c2ShrmLEgKM6AGt8Y%2Fimage.png?alt=media&amp;token=4f1d9365-772f-4eb1-90a2-e25e2b245c09" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2F56JeNxg6Kx6xtzCoAr9b%2FOnPaste.20230618-202411.png?alt=media&amp;token=ae669ece-2440-40ae-bd9a-eb3dcbba0a26" alt=""><figcaption></figcaption></figure>


# Verify with your label

This guide shows you how to verify your ERC-20 token generated on 20lab.app using your own custom label.

### Getting Started with Custom Label

If you choose to verify your token with your own label, click on the button and you will see a pop-up window.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2Fmi2Y5rvjBDLROOQH8HRN%2Fimage.png?alt=media&amp;token=0cf34359-5456-4c50-8d67-1dd7c74b2b42" alt=""><figcaption></figcaption></figure>

For most blockchains, the "Verify with your label" option is available in both automatic and manual modes, but some blockchains only support manual verification. To learn how to manually verify your token, please see the Manual Verification guide:

{% content-ref url="/pages/8PRQr2TQMV5VKmyDfVDA" %}
[Manual verification](/verification-on-block-explorer/verifying-source-code/manual-verification)
{% endcontent-ref %}

### Step 1: Create Your Custom Label

The next step is to enter your custom label in the large text box. This label will appear at the top of your verified token.

{% hint style="warning" %}
**Important:** The label is permanent - you can't change it later, so choose carefully!
{% endhint %}

### Step 2: Purchase Your Custom Label

Once you have entered the label you want, click "Purchase custom label" and confirm the transaction in your wallet.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FwimgdLdlTYmc29segW8i%2Fimage.png?alt=media&amp;token=8d18a2a0-ea39-4e9c-825a-56ea9271a4b4" alt=""><figcaption></figcaption></figure>

### Step 3: Complete the Verification

When your transaction is confirmed, complete the verification by clicking the "Verify" button. The verification request will be sent to the Block Explorer. Once clicked, you should see the Block Explorer processing your request.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FsgNSjv6y4RxBECgTbs1s%2Fimage.png?alt=media&amp;token=b522428a-1720-4e02-ab7d-a9b691eb69fe" alt=""><figcaption></figcaption></figure>

### Step 4: Check Your Results

When the verification is finished, the verification bar in your dashboard will turn green and you will be able to see your verified token with your custom label in the Block Explorer.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2Fhi3c2ShrmLEgKM6AGt8Y%2Fimage.png?alt=media&amp;token=4f1d9365-772f-4eb1-90a2-e25e2b245c09" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FKFo6Tb4KOh9BMVk24V6u%2FOnPaste.20230618-202527.png?alt=media&amp;token=2e837e90-2639-4c6c-b4ec-6e3aee0fe2b7" alt=""><figcaption></figcaption></figure>


# Manual verification

This guide shows you how to manually verify your ERC-20 token generated on 20lab.app on any block explorer.

This verification method works on all EVM blockchains supported by [20lab](https://20lab.app/), but only with the "Verify with your label" option. If you're deploying your token on a blockchain that doesn't support automated verification, or you simply prefer to submit a verification request yourself, you can use this manual verification option.

### Step 1: Prepare Your JSON File

When you click on 'Verify with your label' in your dashboard, a pop-up will appear.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2F8BmzzT6QjEvq4HO7Uf4t%2Fimage.png?alt=media&amp;token=81e6ee96-787b-415b-bdbc-f2e941c1cd46" alt=""><figcaption></figcaption></figure>

#### Create Your Custom Label

Enter your custom label in the large text box. This label will appear at the top of your verified token.

{% hint style="warning" %}
**Important:** The label is permanent - you can't change it later, so choose carefully!
{% endhint %}

#### Download the JSON File

Once you have entered your desired label, click 'Download JSON file'. This JSON file contains all the necessary information about your token, such as source code, libraries, and other details. You will need to upload this file to the Block Explorer in the next steps.

### Step 2: Go to the Block Explorer

Now you can navigate to the Block Explorer page of your token. You should see that you can verify your contract in the 'Contract' tab (for example, on PulseChain you'll see a 'Verify & Publish' button).

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2Fip6vxsolpAk1zKAI8LO7%2FOnPaste.20240318-180311.png?alt=media&amp;token=1d0ae64a-f25b-414e-8bf0-3012426fe585" alt=""><figcaption></figcaption></figure>

### Step 3: Fill Out the Verification Form

Once you click on the verification button, you will see the verification form. Fill it in with the same details as you see on the 20lab verification pop-up (some of them may vary per token) and upload the JSON file you just downloaded.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FRyQpAOqDf2WiUGX5MqLu%2Fimage.png?alt=media&amp;token=b9207367-4dba-466c-803d-cce3e6eaa651" alt=""><figcaption></figcaption></figure>

### Step 4: Complete the Verification

Click 'Verify & Publish' to submit the file and complete the verification process. If it takes too long to load, try refreshing the page to see if your token has been verified in the meantime.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2Fl2a8GSQKyK1NyyDGqL3I%2Fimage.png?alt=media&amp;token=08904cd9-55fd-414a-bad5-160aee3d32c5" alt=""><figcaption></figcaption></figure>

### Success!

That's it - your token has been successfully verified! You can now see your verified token with your custom label on the block explorer.


# Verifying ownership

This guide shows you how to verify ownership of your ERC-20 token generated on 20lab.app on any block explorer.

To add a logo to your token or add your project details to the block explorer, you will need to verify your token ownership. If you have already verified your source code, this is a great next step to attract more people to your project. When people see your token on the Block Explorer, they will know where to go for more information about your project.

### Getting Started

To begin the process, follow these steps:

#### Step 1: Go to Your Token Page

Navigate to your token page in the Block Explorer.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FwrYEGPdSiQms5qvHQG2l%2FOnPaste.20241010-114319.png?alt=media&amp;token=7339c8d7-112e-45a8-8e32-c6569f25498d" alt=""><figcaption></figcaption></figure>

#### Step 2: Access the Token Menu

Click on the token menu on the right side of the screen and select "Update Token Info".

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FFlenGNaYBSHfC6n6UNM3%2FOnPaste.20241010-114525.png?alt=media&amp;token=c7f87d68-1d2b-4993-ba2e-7833b41696cd" alt=""><figcaption></figcaption></figure>

#### Step 3: Review the Requirements

You will see a pop-up with information about:

* Creating an account on the block explorer page
* Verifying the source code of your token

If you haven't verified your source code yet, please read our guide on verifying source code with [20lab](https://20lab.app/) first:&#x20;

{% content-ref url="/pages/GTyU8VPvbePZyXp8XF3S" %}
[Verifying source code](/verification-on-block-explorer/verifying-source-code)
{% endcontent-ref %}

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FDgVcUa9vFbWY4nymCwbr%2Fimage.png?alt=media&amp;token=5fc14e12-304c-428b-b89f-8450effc19c8" alt=""><figcaption></figcaption></figure>

### Verification Mode

After clicking "Verify Address Ownership", there are 2 possible scenarios, depending on whether the block explorer supports automatic signature verification for tokens created by smart contracts:

#### Option 1: Automatic Signature Verification

If the Block Explorer supports automatic mode, follow the Automatic Signature Verification instructions:

{% content-ref url="/pages/J9OyWqnOMfwmKWkavDQy" %}
[Automatic Signature Verification](/verification-on-block-explorer/verifying-ownership/automatic-signature-verification)
{% endcontent-ref %}

#### Option 2: Manual Signature Verification

If the Block Explorer does not support automatic mode and you see the "Proceed to Contact Us" button, follow the Manual Signature Verification instructions:

{% content-ref url="/pages/fjoDFjMee0yvS9yOfnRS" %}
[Manual Signature Verification](/verification-on-block-explorer/verifying-ownership/manual-signature-verification)
{% endcontent-ref %}


# Automatic Signature Verification

This guide shows you how to verify ownership of your ERC-20 token generated on 20lab.app using the automatic verification method.

All tokens on [20lab.app](https://20lab.app/) are created through our registry contract, and many block explorers have recently added support for automatic ownership verification for such tokens. This makes the whole process much easier and eliminates the need to contact the block explorer team via a support ticket. If automatic mode is supported, you will see the verification page.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2F8HQXFy0joCMfI8PHqN18%2FOnPaste.20241010-120039.png?alt=media&amp;token=cb8b32a3-6c34-41a5-acae-bb7452d23662" alt=""><figcaption></figcaption></figure>

### Signing a Message

To verify ownership, you need to sign a message using a Web3 wallet that is either the deployer of the token or the current owner:

#### Step 1: Connect Your Wallet

Click "Connect to Web3" to connect your wallet. The address of the connected wallet must match the address displayed in the block explorer. For example, if the block explorer shows 0x163c...7cac, your connected wallet must have this same address.

#### Step 2: Sign the Message

Click on "Sign with Web3". Your wallet will automatically show you the message signature request.

#### Step 3: Confirm the Signature

Confirm the signature request in your wallet.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FPS61s2qnr1ngnXa89aWg%2Fimage.png?alt=media&amp;token=2a7986b7-2d21-430d-8f32-24e1e02e63fc" alt=""><figcaption></figcaption></figure>

### Complete the Verification

After signing the message in your wallet and proceeding, you will see that the signature hash is automatically added below the signed message.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FiANXLKWURuS9omubHkML%2Fimage.png?alt=media&amp;token=c12d7798-c2e0-4d7c-9bd5-324b8855dd08" alt=""><figcaption></figcaption></figure>

Click on "Verify Ownership" to complete the verification process. If everything went successfully, you will see that ownership has been verified and you can continue to manage your token information on the Block Explorer, such as:

* Updating token information
* Adding tags/labels to be displayed publicly with your token
* Adding your project logo

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FlXRsDg9sZqKRBwKnFZqD%2Fimage.png?alt=media&amp;token=dc1043d1-0d20-48bb-a836-ae46950eaae9" alt=""><figcaption></figcaption></figure>


# Manual Signature Verification

This guide shows you how to manually verify ownership of your ERC-20 token generated on 20lab when automatic verification is not available.

All tokens on [20lab.app](https://20lab.app/) are created through our registry contract. Some block explorers may not support automatic verification yet. If this is the case, you'll see a pop-up message telling you that you need to contact the block explorer team. You will need to manually sign a message with your token owner's address and send it as a support ticket to the block explorer.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FWuN8GUM9JYKAbYmmF3yf%2Fimage.png?alt=media&amp;token=004c37e4-5b85-459b-904e-c593b8650ea7" alt=""><figcaption></figcaption></figure>

### Signing a Message

You need to sign a message with your wallet. It may sound difficult, but it's really easy and free as well.

#### Step 1: Visit the Message Signing Tool

Go to <https://app.mycrypto.com/sign-message> - this is a message signing tool.

#### Step 2: Connect Your Wallet

Connect the wallet of your token owner. The blockchain you're signing from doesn't affect the signature!

#### Step 3: Create Your Message

Paste the message below into the text box and replace the information in brackets with the correct details about your token:

> I am the creator of the token contract address \[your token address] and \[your owner wallet address] and \[your BscScan/Etherscan/... username] is the owner of the contract address.

All this information is easily accessible from your 20lab dashboard (except the block explorer username, which you can get after registering an account).

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FnjoRZPueBroWrJNoM4YV%2Fimage.png?alt=media&amp;token=695cef68-1eba-4d4d-93bf-3d528c683713" alt=""><figcaption></figcaption></figure>

#### Step 4: Sign the Message

Once you have your complete message ready, you can sign it using the tool.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2F0Q1Gn3hPdgJKb3McAeNB%2Fimage.png?alt=media&amp;token=619d594a-1386-46df-bbb4-6ed369ce5977" alt=""><figcaption></figcaption></figure>

#### Step 5: Verify the Signature

After signing, you should see the signature field appear automatically.

{% hint style="warning" %}
**Important:** Please check that the address shown in the "address" line of the signature is the same as the one you entered in the message as the token owner's wallet!
{% endhint %}

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FMh7RXlRS4tRr7RmJq9QK%2Fimage.png?alt=media&amp;token=16f375d8-4642-40f5-a566-ece7f987c286" alt=""><figcaption></figcaption></figure>

### Sending Your Signed Message

Once you have received the signature of your message, you can go back to the block explorer page and click "Proceed To Contact Us".

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2Fsti40z6LoTeHzSOdY0q3%2Fimage.png?alt=media&amp;token=3e23c91b-476d-41fe-bb49-260ebd261ef3" alt=""><figcaption></figcaption></figure>

#### Fill Out the Contact Form

Now you can fill in all the necessary information:

1. Enter your name and email address
2. Paste the signature in the message box
3. Click 'Send Message'

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2FOEZSmDmmHy3Aa86b4Xif%2FOnPaste.20230604-112805.png?alt=media&amp;token=a7666fe7-4055-47f0-a739-abaa94836d83" alt=""><figcaption></figcaption></figure>

### Wait for Review

The only thing left to do is wait for the block explorer team to review your message and verify that the actual ownership of your token matches what is stated in the signed message. You will receive an email with their response and next steps.


# Supported exchanges

Review the supported DEXes available for selection as the default exchange for your ERC-20 token.

The [20lab.app](https://20lab.app/) token generator supports various DEXes for tokens with specific features. These features require internal connections to DEXes to function correctly. For example, liquidity tax functionality requires the token to identify the appropriate DEX for adding liquidity from collected transaction fees. The following list shows the supported DEXes per blockchain and their corresponding router smart contracts used by 20lab:

## MAINNETS

### Ethereum

<table><thead><tr><th>Name</th><th>Router address</th><th>Token integration template</th><th data-type="checkbox">Available in token generator</th><th data-type="checkbox">Available in tools</th></tr></thead><tbody><tr><td>Uniswap V2 (Ethereum)</td><td>0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D</td><td>uniswap</td><td>true</td><td>true</td></tr><tr><td>ShibaSwap V1</td><td>0x03f7724180AA6b939894B5Ca4314783B0b36b329</td><td>uniswap</td><td>true</td><td>true</td></tr><tr><td>PancakeSwap V2 (Ethereum)</td><td>0xEfF92A263d31888d860bD50809A8D171709b7b1c</td><td>uniswap</td><td>true</td><td>true</td></tr><tr><td>SushiSwap V2 (Ethereum)</td><td>0xd9e1cE17f2641f24aE83637ab66a2cca9C378B9F</td><td>uniswap</td><td>false</td><td>true</td></tr></tbody></table>

### Binance Smart Chain

<table><thead><tr><th>Name</th><th>Router address</th><th>Token integration template</th><th data-type="checkbox">Available in token generator</th><th data-type="checkbox">Available in tools</th></tr></thead><tbody><tr><td>PancakeSwap V2 (BSC)</td><td>0x10ED43C718714eb63d5aA57B78B54704E256024E</td><td>uniswap</td><td>true</td><td>true</td></tr><tr><td>Uniswap V2 (BSC)</td><td>0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24</td><td>uniswap</td><td>true</td><td>true</td></tr><tr><td>ApeSwap (BSC)</td><td>0xcF0feBd3f17CEf5b47b0cD257aCf6025c5BFf3b7</td><td>uniswap</td><td>true</td><td>true</td></tr><tr><td>SushiSwap V2 (BSC)</td><td>0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506</td><td>uniswap</td><td>false</td><td>true</td></tr></tbody></table>

### Polygon

<table><thead><tr><th>Name</th><th>Router address</th><th>Token integration template</th><th data-type="checkbox">Available in token generator</th><th data-type="checkbox">Available in tools</th></tr></thead><tbody><tr><td>QuickSwap V2</td><td>0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff</td><td>uniswap</td><td>true</td><td>true</td></tr><tr><td>Uniswap V2 (Polygon)</td><td>0xedf6066a2b290C185783862C7F4776A2C8077AD1</td><td>uniswap</td><td>true</td><td>true</td></tr><tr><td>ApeSwap (Polygon)</td><td>0xC0788A3aD43d79aa53B09c2EaCc313A787d1d607</td><td>uniswap</td><td>true</td><td>true</td></tr><tr><td>SushiSwap V2 (Polygon)</td><td>0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506</td><td>uniswap</td><td>false</td><td>true</td></tr></tbody></table>

### Avalanche C-Chain

<table><thead><tr><th>Name</th><th>Router address</th><th>Token integration template</th><th data-type="checkbox">Available in token generator</th><th data-type="checkbox">Available in tools</th></tr></thead><tbody><tr><td>LFJ V1 (Avalanche)</td><td>0x60aE616a2155Ee3d9A68541Ba4544862310933d4</td><td>uni_avax<br>(can impact token address)</td><td>true</td><td>true</td></tr><tr><td>Uniswap V2 (Avalanche)</td><td>0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24</td><td>uniswap</td><td>true</td><td>true</td></tr><tr><td>Pangolin V2</td><td>0xE54Ca86531e17Ef3616d22Ca28b0D458b6C89106</td><td>uni_avax<br>(can impact token address)</td><td>true</td><td>true</td></tr><tr><td>SushiSwap V2 (Avalanche)</td><td>0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506</td><td>uniswap</td><td>false</td><td>true</td></tr></tbody></table>

### Arbitrum One

<table><thead><tr><th>Name</th><th>Router address</th><th>Token integration template</th><th data-type="checkbox">Available in token generator</th><th data-type="checkbox">Available in tools</th></tr></thead><tbody><tr><td>Uniswap V2 (Arbitrum One)</td><td>0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24</td><td>uniswap</td><td>true</td><td>true</td></tr><tr><td>Camelot V2</td><td>0xc873fEcbd354f5A56E00E710B90EF4201db2448d</td><td><p>camelot</p><p>(can impact token address)</p></td><td>true</td><td>true</td></tr><tr><td>PancakeSwap V2 (Arbitrum One)</td><td>0x8cFe327CEc66d1C090Dd72bd0FF11d690C33a2Eb</td><td>uniswap</td><td>true</td><td>true</td></tr><tr><td>SushiSwap V2 (Arbitrum One)</td><td>0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506</td><td>uniswap</td><td>false</td><td>true</td></tr><tr><td>LFJ V1 (Arbitrum One)</td><td>0xbeE5c10Cf6E4F68f831E11C1D9E59B43560B3642</td><td>uni_avax<br>(can impact token address)</td><td>false</td><td>true</td></tr></tbody></table>

### Optimism

<table><thead><tr><th>Name</th><th>Router address</th><th>Token integration template</th><th data-type="checkbox">Available in token generator</th><th data-type="checkbox">Available in tools</th></tr></thead><tbody><tr><td>Uniswap V2 (Optimism)</td><td>0x4A7b5Da61326A6379179b40d00F57E5bbDC962c2</td><td>uniswap</td><td>true</td><td>true</td></tr><tr><td>Velodrome Basic</td><td>0xa062aE8A9c5e11aaA026fc2670B0D65cCc8B2858</td><td>algebra_aerodrome<br>(can impact token address)</td><td>true</td><td>true</td></tr><tr><td>Elk Finance V2 (Optimism)</td><td>0xeadE97aFC8f79A8E5Ba85d57C4a4E629b1160C6A</td><td>uniswap</td><td>false</td><td>true</td></tr><tr><td>SushiSwap V2 (Optimism)</td><td>0x2ABf469074dc0b54d793850807E6eb5Faf2625b1</td><td>uniswap</td><td>false</td><td>true</td></tr></tbody></table>

### Cronos

<table><thead><tr><th>Name</th><th>Router address</th><th>Token integration template</th><th data-type="checkbox">Available in token generator</th><th data-type="checkbox">Available in tools</th></tr></thead><tbody><tr><td>VVS Finance V2</td><td>0x145863Eb42Cf62847A6Ca784e6416C1682b1b2Ae</td><td>uniswap</td><td>true</td><td>true</td></tr><tr><td>CronaSwap</td><td>0xcd7d16fB918511BF7269eC4f48d61D79Fb26f918</td><td>uniswap</td><td>true</td><td>true</td></tr><tr><td>Crodex</td><td>0xeC0A7a0C2439E8Cb67b992b12ecd020Ea943c7Be</td><td>uniswap</td><td>true</td><td>true</td></tr><tr><td>MM Finance V2</td><td>0x145677FC4d9b8F19B5D56d1820c48e0443049a30</td><td>uniswap</td><td>false</td><td>true</td></tr></tbody></table>

### PulseChain

<table><thead><tr><th>Name</th><th>Router address</th><th>Token integration template</th><th data-type="checkbox">Available in token generator</th><th data-type="checkbox">Available in tools</th></tr></thead><tbody><tr><td>PulseX V1</td><td>0x98bf93ebf5c380C0e6Ae8e192A7e2AE08edAcc02</td><td>pulsex_pls<br>(can impact token address)</td><td>true</td><td>true</td></tr><tr><td>PulseX V2</td><td>0x165C3410fC91EF562C50559f7d2289fEbed552d9</td><td>pulsex_pls<br>(can impact token address)</td><td>true</td><td>true</td></tr><tr><td>9mm V2</td><td>0xcC73b59F8D7b7c532703bDfea2808a28a488cF47</td><td>uniswap</td><td>true</td><td>true</td></tr><tr><td>9inch V2</td><td>0xeB45a3c4aedd0F47F345fB4c8A1802BB5740d725</td><td>uniswap</td><td>true</td><td>true</td></tr></tbody></table>

### Base

<table><thead><tr><th>Name</th><th>Router address</th><th>Token integration template</th><th data-type="checkbox">Available in token generator</th><th data-type="checkbox">Available in tools</th></tr></thead><tbody><tr><td>Uniswap V2 (Base)</td><td>0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24</td><td>uniswap</td><td>true</td><td>true</td></tr><tr><td>Aerodrome Basic</td><td>0xcF77a3Ba9A5CA399B7c97c74d54e5b1Beb874E43</td><td>algebra_aerodrome<br>(can impact token address)</td><td>true</td><td>true</td></tr><tr><td>PancakeSwap V2 (Base)</td><td>0x8cFe327CEc66d1C090Dd72bd0FF11d690C33a2Eb</td><td>uniswap</td><td>true</td><td>true</td></tr><tr><td>SwapBased V2</td><td>0xaaa3b1F1bd7BCc97fD1917c18ADE665C5D31F066</td><td>uniswap</td><td>true</td><td>true</td></tr><tr><td>SushiSwap V2 (Base)</td><td>0x6BDED42c6DA8FBf0d2bA55B2fa120C5e0c8D7891</td><td>uniswap</td><td>false</td><td>true</td></tr></tbody></table>

### Core

<table><thead><tr><th>Name</th><th>Router address</th><th>Token integration template</th><th data-type="checkbox">Available in token generator</th><th data-type="checkbox">Available in tools</th></tr></thead><tbody><tr><td>ArcherSwap</td><td>0x74F56a7560eF0C72Cf6D677e3f5f51C2D579fF15</td><td>uniswap</td><td>true</td><td>true</td></tr><tr><td>ShadowSwap</td><td>0xCCED48E6fe655E5F28e8C4e56514276ba8b34C09</td><td>uniswap</td><td>false</td><td>true</td></tr><tr><td>LFGswap</td><td>0x42a0F91973536f85B06B310fa9C70215784F35a1</td><td>uniswap</td><td>false</td><td>true</td></tr><tr><td>OpenEX</td><td>0xc885C4a8B112B8a165338566421c685024Ec44F9</td><td>uniswap</td><td>false</td><td>true</td></tr></tbody></table>

### Linea

<table><thead><tr><th>Name</th><th>Router address</th><th>Token integration template</th><th data-type="checkbox">Available in token generator</th><th data-type="checkbox">Available in tools</th></tr></thead><tbody><tr><td>Lynex Classic</td><td>0x610D2f07b7EdC67565160F587F37636194C34E74</td><td>algebra_thena<br>(can impact token address)</td><td>true</td><td>true</td></tr><tr><td>Etherex Classic</td><td>0x32dB39c56C171b4c96e974dDeDe8E42498929c54</td><td>algebra_shadow<br>(can impact token address)</td><td>true</td><td>true</td></tr><tr><td>PancakeSwap V2 (Linea)</td><td>0x8cFe327CEc66d1C090Dd72bd0FF11d690C33a2Eb</td><td>uniswap</td><td>true</td><td>true</td></tr><tr><td>SushiSwap V2 (Linea)</td><td>0x2ABf469074dc0b54d793850807E6eb5Faf2625b1</td><td>uniswap</td><td>false</td><td>true</td></tr><tr><td>Secta Finance V2</td><td>0x4cB96E7f17eA50016dB841171a30899f0497c5dB</td><td>uniswap</td><td>false</td><td>true</td></tr></tbody></table>

### Mantle

<table><thead><tr><th>Name</th><th>Router address</th><th>Token integration template</th><th data-type="checkbox">Available in token generator</th><th data-type="checkbox">Available in tools</th></tr></thead><tbody><tr><td>Merchant Moe V1</td><td>0xeaEE7EE68874218c3558b40063c42B82D3E7232a</td><td>moe<br>(can impact token address)</td><td>true</td><td>true</td></tr><tr><td>FusionX V2</td><td>0xDd0840118bF9CCCc6d67b2944ddDfbdb995955FD</td><td>uniswap</td><td>true</td><td>true</td></tr></tbody></table>

### Blast

<table><thead><tr><th>Name</th><th>Router address</th><th>Token integration template</th><th data-type="checkbox">Available in token generator</th><th data-type="checkbox">Available in tools</th></tr></thead><tbody><tr><td>Uniswap V2 (Blast)</td><td>0xBB66Eb1c5e875933D44DAe661dbD80e5D9B03035</td><td>uniswap</td><td>true</td><td>true</td></tr><tr><td>DYOR Swap (Blast)</td><td>0xE470699f6D0384E3eA68F1144E41d22C6c8fdEEf</td><td>uniswap</td><td>true</td><td>true</td></tr><tr><td>SushiSwap V2 (Blast)</td><td>0x54CF3d259a06601b5bC45F61A16443ed5404DD64</td><td>uniswap</td><td>false</td><td>true</td></tr><tr><td>BlasterSwap V2</td><td>0xc972FaE6b524E8A6e0af21875675bF58a3133e60</td><td>uniswap</td><td>false</td><td>true</td></tr></tbody></table>

### Metis

<table><thead><tr><th>Name</th><th>Router address</th><th>Token integration template</th><th data-type="checkbox">Available in token generator</th><th data-type="checkbox">Available in tools</th></tr></thead><tbody><tr><td>Hercules V2 (LP-only version)</td><td>0x14679D1Da243B8c7d1A4c6d0523A2Ce614Ef027C</td><td>camelot<br>(can impact token address)</td><td>true</td><td>true</td></tr><tr><td>Netswap</td><td>0x1E876cCe41B7b844FDe09E38Fa1cf00f213bFf56</td><td>uni_metis<br>(can impact token address)</td><td>true</td><td>true</td></tr></tbody></table>

### Sonic

<table><thead><tr><th>Name</th><th>Router address</th><th>Token integration template</th><th data-type="checkbox">Available in token generator</th><th data-type="checkbox">Available in tools</th></tr></thead><tbody><tr><td>Shadow Exchange Classic</td><td>0x1D368773735ee1E678950B7A97bcA2CafB330CDc</td><td>algebra_shadow<br>(can impact token address)</td><td>true</td><td>true</td></tr><tr><td>SpookySwap V2</td><td>0xa6AD18C2aC47803E193F75c3677b14BF19B94883</td><td>uniswap</td><td>true</td><td>true</td></tr><tr><td>Metropolis V2</td><td>0x95a7e403d7cF20F675fF9273D66e94d35ba49fA3</td><td>uniswap</td><td>true</td><td>true</td></tr><tr><td>DYOR Swap (Sonic)</td><td>0x591cf6942c422fA53E8D81c62a9692D7BeA72F61</td><td>uniswap</td><td>true</td><td>true</td></tr></tbody></table>

### Unichain

<table><thead><tr><th>Name</th><th>Router address</th><th>Token integration template</th><th data-type="checkbox">Available in token generator</th><th data-type="checkbox">Available in tools</th></tr></thead><tbody><tr><td>Uniswap V2 (Unichain)</td><td>0x284F11109359a7e1306C3e447ef14D38400063FF</td><td>uniswap</td><td>true</td><td>true</td></tr></tbody></table>

### HyperEVM

<table><thead><tr><th>Name</th><th>Router address</th><th>Token integration template</th><th data-type="checkbox">Available in token generator</th><th data-type="checkbox">Available in tools</th></tr></thead><tbody><tr><td>HyperSwap V2</td><td>0xb4a9C4e6Ea8E2191d2FA5B380452a634Fb21240A</td><td>camelot<br>(can impact token address)</td><td>true</td><td>true</td></tr></tbody></table>

### Monad

<table><thead><tr><th>Name</th><th>Router address</th><th>Token integration template</th><th data-type="checkbox">Available in token generator</th><th data-type="checkbox">Available in tools</th></tr></thead><tbody><tr><td>Uniswap V2 (Monad)</td><td>0x4B2ab38DBF28D31D467aA8993f6c2585981D6804</td><td>uniswap</td><td>true</td><td>true</td></tr><tr><td>PancakeSwap V2 (Monad)</td><td>0xB1Bc24c34e88f7D43D5923034E3a14B24DaACfF9</td><td>uniswap</td><td>true</td><td>true</td></tr><tr><td>DYOR Swap (Monad)</td><td>0x26CEb692410c4b3C12D63e01CFc03eEA103fc474</td><td>uniswap</td><td>true</td><td>true</td></tr></tbody></table>

### Robinhood

<table><thead><tr><th>Name</th><th>Router address</th><th>Token integration template</th><th data-type="checkbox">Available in token generator</th><th data-type="checkbox">Available in tools</th></tr></thead><tbody><tr><td>Uniswap V2 (Robinhood)</td><td>0x89e5DB8B5aA49aA85AC63f691524311AEB649eba</td><td>uniswap</td><td>true</td><td>true</td></tr></tbody></table>

## TESTNETS

### Ethereum Sepolia

<table><thead><tr><th>Name</th><th>Router address</th><th>Token integration template</th><th data-type="checkbox">Available in token generator</th><th data-type="checkbox">Available in tools</th></tr></thead><tbody><tr><td>Uniswap V2 (Sepolia Testnet)</td><td>0xeE567Fe1712Faf6149d80dA1E6934E354124CfE3</td><td>uniswap</td><td>true</td><td>true</td></tr></tbody></table>

### Binance Smart Chain Testnet

<table><thead><tr><th>Name</th><th>Router address</th><th>Token integration template</th><th data-type="checkbox">Available in token generator</th><th data-type="checkbox">Available in tools</th></tr></thead><tbody><tr><td>PancakeSwap V2 (BSC Testnet)</td><td>0xD99D1c33F9fC3444f8101754aBC46c52416550D1</td><td>uniswap</td><td>true</td><td>true</td></tr></tbody></table>

### Base Sepolia

<table><thead><tr><th>Name</th><th>Router address</th><th>Token integration template</th><th data-type="checkbox">Available in token generator</th><th data-type="checkbox">Available in tools</th></tr></thead><tbody><tr><td>PancakeSwap V2 (Base Sepolia)</td><td>0x8cFe327CEc66d1C090Dd72bd0FF11d690C33a2Eb</td><td>uniswap</td><td>true</td><td>true</td></tr></tbody></table>

### Arbitrum Sepolia

<table><thead><tr><th>Name</th><th>Router address</th><th>Token integration template</th><th data-type="checkbox">Available in token generator</th><th data-type="checkbox">Available in tools</th></tr></thead><tbody><tr><td>PancakeSwap V2 (Arbitrum Sepolia)</td><td>0x8cFe327CEc66d1C090Dd72bd0FF11d690C33a2Eb</td><td>uniswap</td><td>true</td><td>true</td></tr></tbody></table>

### Unichain Sepolia

<table><thead><tr><th>Name</th><th>Router address</th><th>Token integration template</th><th data-type="checkbox">Available in token generator</th><th data-type="checkbox">Available in tools</th></tr></thead><tbody><tr><td>Uniswap V2 (Unichain Sepolia)</td><td>0x920b806E40A00E02E7D2b94fFc89860fDaEd3640</td><td>uniswap</td><td>true</td><td>true</td></tr></tbody></table>

## CUSTOM EXCHANGE

### All blockchains

<table><thead><tr><th>Name</th><th>Router address</th><th>Token integration template</th><th data-type="checkbox">Available in token generator</th><th data-type="checkbox">Available in tools</th></tr></thead><tbody><tr><td>Custom exchange</td><td>(Provided by user)</td><td>uniswap</td><td>true</td><td>true</td></tr></tbody></table>

To integrate a custom DEX, please refer to the following documentation page:

{% content-ref url="/pages/mYK9yu7Cf6PZmhL2HPjK" %}
[Custom exchange](/decentralized-exchanges/custom-exchange)
{% endcontent-ref %}


# Custom exchange

Read this guide to learn more about using a custom exchange option for generating your ERC-20 token or using tools.

<figure><img src="https://2227986809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiXsnL20jyBNNxpiEbHVU%2Fuploads%2F539rmNN7fA7EfcBTeG3y%2Fimage.png?alt=media&amp;token=a55fe53a-adc0-4efa-8e93-ca6bb177ff67" alt=""><figcaption></figcaption></figure>

You can use custom DEXes on [20lab.app](https://20lab.app/) if you want to use exchanges that aren't listed in our default options. If you want to use a DEX that we haven't added yet, you can do this by selecting the "Custom exchange" option and providing valid RouterV2 smart contract address.\
\
Follow these steps to make sure you can continue once you choose your DEX:

### 1. Find the RouterV2 Smart Contract Address

You'll need to find the RouterV2 address and enter it below the "Custom Exchange" drop down menu. Here's how to find it:

* Go to your DEX's documentation or website
* Look for a section called "deployed contract addresses" or "smart contracts"
* Find the RouterV2 address, copy it, and paste it into the correct field

### 2. Check if Your DEX Has the Right Functions

Don't worry - 20lab automatically checks if your custom exchange has all the functions it needs before creating your ERC-20 token or using tools. Most DEXes that are Uniswap forks will work fine, , unless they've intentionally removed or changed the original functions.

Your custom exchange needs to have these specific functions for your token to be correctly integrated. You need different sets of functions depending on whether you are creating a new ERC-20 token or using ERC-20 tools.

#### When generating new ERC-20 token

**RouterV2 smart contract**

```solidity
function factory() external pure returns (address);

function WETH() external pure returns (address);

function addLiquidityETH(
    address token,
    uint amountTokenDesired,
    uint amountTokenMin,
    uint amountETHMin,
    address to,
    uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);

function removeLiquidityETH(
    address token,
    uint liquidity,
    uint amountTokenMin,
    uint amountETHMin,
    address to,
    uint deadline
) external returns (uint amountToken, uint amountETH);

function swapExactTokensForTokensSupportingFeeOnTransferTokens(
    uint amountIn,
    uint amountOutMin,
    address[] calldata path,
    address to,
    uint deadline
) external;

function swapExactTokensForETHSupportingFeeOnTransferTokens(
    uint amountIn,
    uint amountOutMin,
    address[] calldata path,
    address to,
    uint deadline
) external;
```

**Factory smart contract**

```solidity
function createPair(address tokenA, address tokenB) external returns (address pair);
```

#### When using ERC-20 tools

**RouterV2 smart contract**

```solidity
function addLiquidity(
    address tokenA,
    address tokenB,
    uint amountADesired,
    uint amountBDesired,
    uint amountAMin,
    uint amountBMin,
    address to,
    uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);

function addLiquidityETH(
    address token,
    uint amountTokenDesired,
    uint amountTokenMin,
    uint amountETHMin,
    address to,
    uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);

function removeLiquidity(
    address tokenA,
    address tokenB,
    uint liquidity,
    uint amountAMin,
    uint amountBMin,
    address to,
    uint deadline
) external returns (uint amountA, uint amountB);

function removeLiquidityETH(
    address token,
    uint liquidity,
    uint amountTokenMin,
    uint amountETHMin,
    address to,
    uint deadline
) external returns (uint amountToken, uint amountETH);
```

{% hint style="warning" %}
**What we check for**

1. All the functions listed above must exist, depending on the service being used (ERC-20 token generator or ERC-20 tools)
2. Each function must have exactly the same parameters (no more, no less)
3. The parameters must be in the exact same order and type
   {% endhint %}


# Terms of Service

Last updated: January 11, 2026

Please read these Terms of Service (hereinafter referred to as "Terms" or "Terms and Conditions") carefully before using our Services.

### RISK WARNING

*Any information available on the Website, as well as available on other websites, related to the above, does not constitute a so-called "recommendation" - neither in whole nor in part, in the light of the provisions of the Act on Trading in Financial Instruments of July 29, 2005 or the Regulation (EU) No. 596/2014 of the European Parliament and of the Council of April 16, 2014 on market abuse (Market Abuse Regulation) and repealing Directive 2003/6/EC of the European Parliament and of the Council and Commission Directives 2003/124/EC, 2003/125/EC and 2004/72/EC and Commission Delegated Regulations (EU) 2017/565 of April 25, 2016 supplementing Directive 2014/65/EU of the European Parliament and of the Council with regard to organizational requirements and operating conditions for investment firms and terms defined for the purposes of that Directive.*

*The Service Provider draws particular attention to the fact that making investments in the cryptocurrency market or the stock market, involves many risks, especially in terms of high volatility and fluctuations in these markets, which may cause the loss of the entire invested capital. With respect to any material or Content made available through the Website, you should invest only the amount of funds you can afford to lose. By accepting these Terms and Conditions, the Client and the Consumer declares that he/she has familiarized himself/herself with the mechanisms of blockchain technology and stock markets, and is aware of the investment risks mentioned above.*

### 01. DEFINITIONS

1. **SERVICE PROVIDER / SELLER** - The Service Provider of the Website is 20LAB spółka z ograniczoną odpowiedzialnością, based in Wrocław (address: ul. Dmowskiego 3/9, 50-203 Wrocław), registered in the Register of Entrepreneurs kept by the District Court for Wrocław Fabryczna in Wrocław, IX Economic Department of the National Court Register, under KRS number: 0001053949, REGON: 526163232, NIP: 9151826889, share capital: PLN 5,000.00 (hereinafter also referred to as: "Service Provider");
2. **WEBSITE** - the website located at <https://20lab.app/> where the Client can purchase Services;
3. **TERMS AND CONDITIONS** - this document setting out the rights and obligations of the Client and Service Provider, the rules for entering into a contract, as well as the provision of Services;
4. **CLIENT** - a natural person with full legal capacity (Consumer), a legal person or an organizational unit with appropriate rights regulated by national legislation, if such is necessary in the country of residence;
5. **CONSUMER** - a natural person with full legal capacity making a legal transaction with an entrepreneur that is not directly related to his/her business or professional activity;
6. **PRICE** - specified in USD (U.S. dollar), SOL (Solana) or SUI (Sui) cryptocurrencies, representing the amount of gross remuneration (including VAT for countries from the European Union) due to the Service Provider for the provision of Services by the Service Provider;
7. **WALLET** - a cryptocurrency wallet provided by third-party Providers (WalletConnect, Coinbase, MetaMask, TrustWallet and others);
8. **PROVIDERS** - external entities or websites of such third parties to which the Website may redirect, including access to a particular Service;
9. **CONTENT** - textual, graphic or multimedia elements (e.g. information about the Services, photos, videos, descriptions) including works within the meaning of the Law on Copyright and Related Rights;
10. **DIGITAL CONTENT** - data produced and delivered in digital form, such as software for generating or verifying tokens;
11. **SERVICES** - a service or services provided electronically within the meaning of the Act on Provision of Electronic Services by the Service Provider within the Website to the Client, including in particular services consisting in providing software for generating ERC-20, SPL (Solana) and Sui tokens, verification of ERC-20 tokens produced, or tools for post-creation management meaning technical tools enabling the Client to interact with and configure token's functions solely based on the Client’s instructions, without discretionary control or independent decision-making\
    by the Service Provider;
12. **USER CONTENT** - any content, data or information submitted, uploaded, published or otherwise provided by the Client via the Website or Services, including Token Pages;
13. **TOKEN PAGE** - a public page hosted on the Website created by a Client for tokens generated through the Services, containing automatically fetched on-chain content and Client-provided Content, including but not limited to description, logo, external links, and other related information;
14. **DIGITAL CONTENT DELIVERY AGREEMENT** - an agreement the subject of which is the delivery of Digital Content;
15. **FORM** - a form available on the Website, the completion of which is necessary for the effective conclusion of the Digital Content Delivery Agreement;
16. **CIVIL CODE** - means the Act of April 23, 1964 Civil Code;
17. **CONSUMER RIGHTS ACT** - means the Act of May 30, 2014 on consumer rights.

### 02. GENERAL PROVISION

1. These Terms and Conditions define the rights and obligations of the Clients, as well as the rights and obligations of the Service Provider, as an entity that is also a seller of the Services available through the Website.
2. Acceptance of these Terms and Conditions is voluntary, but necessary in order to use the Website and the Services available on it. At the same time, use of the Website means any activity that leads to reading the Content on the Website.
3. The Client declares that, within the framework of any redirection by the Website to Providers, including within the framework of third-party services to which the Website may redirect as part of access to a particular Service, in each such case the Client agrees to accept the terms and conditions and other formal and legal documentation of such third-party service, and provided directly by the Provider. At the same time, the Service Provider declares that it will exercise due diligence to properly inform of such redirection within the individual Service.
4. By accepting these Terms and Conditions, the Client declares that he realizes that the Service Provider does not provide any payment services, as well as any financial and investment services, in particular, does not participate in trading in securities and other financial instruments.
5. Information made available through the Website, is only an invitation to conclude a contract within the meaning of Article 71 of the Civil Code, directed by the Seller to Clients, and not an offer within the meaning of the Civil Code.
6. The Client is entitled and obliged to use the Website in accordance with its purpose. Introduction of unlawful content is prohibited.
7. The Terms and Conditions are made available on the Website by the Service Provider free of charge in electronic form in such a way that each Client has the opportunity to read their content, as well as have the opportunity to record them - including by printing them out.
8. The Service Provider undertakes to process Clients' personal data in accordance with the provisions detailed in the privacy policy made available electronically through the Website.
9. The Client, declares that he has read and understood the provisions of these Terms and Conditions in full, and that he does not raise any objections or additions to them.

### 03. CONCLUSION OF AN AGREEMENT TO PROVIDE DIGITAL CONTENT

1. In order to conclude a Digital Content Delivery Agreement, it is necessary to fill out the Form, displayed directly on the Website, and connect the Wallet to the Website. Detailed information regarding the data provided by the Client on the Form, is included directly on the Website.
2. In general, browsing the Content available on the Website does not require filling out a Form or connecting a Wallet to the Website. However, performing the actions referred to in the preceding sentence is necessary in order to use the individual Services indicated directly on the Website.
3. Before completing the Form and before connecting the Wallet to the Website, the Client has the opportunity to read the provisions of the Terms and Conditions and other documents and is required to accept their contents.
4. The Client acknowledges and declares that he understands that in some countries there is a requirement that the prices quoted to buyers on search results and information pages should be the same as the amount at the stage of payment for the order. This means that all taxes, including VAT, must be included in the price. The current Price displayed on the Website includes the VAT of the following countries:

(Tab. No 1)

| Austria        | Italy       |
| -------------- | ----------- |
| Belgium        | Latvia      |
| Bulgaria       | Lithuania   |
| Croatia        | Luxembourg  |
| Cyprus         | Malta       |
| Czech Republic | Netherlands |
| Denmark        | Poland      |
| Estonia        | Portugal    |
| Finland        | Romania     |
| France         | Slovakia    |
| Germany        | Slovenia    |
| Greece         | Spain       |
| Hungary        | Sweden      |
| Ireland        |             |

5. If the Client has a permanent residence or habitual place of stay in a country included in the table above, it is up to the Service Provider to determine the appropriate tax rate on the sale of the Services and then pay the tax to the appropriate tax office.
6. If the Client has a permanent residence or habitual place of stay in a third country, i.e. in a country not listed in the table above (Tab. No 1), the CLIENT IS PERSONALLY RESPONSIBLE FOR DETERMINING THE APPROPRIATE SALES TAX RATE AND THEN EFFECTIVELY PAYING THE REQUIRED TAXES TO THE APPROPRIATE (NOT NECESSARILY LOCAL) TAX AUTHORITY, subject to paragraph 7. For this purpose, when completing the Form, the Client is required to make the appropriate statement that reads: "I hereby declare that I have my permanent residence or habitual place of stay in a selected third country, i.e. a country that is not a member of the European Union. At the same time, I understand that I must individually determine the appropriate VAT rate for the purchase of the Service on the Website and then effectively pay the VAT to the appropriate tax authority for my permanent residence or habitual place of stay.".
7. The Service Provider declares, and the Client acknowledges and agrees, that it is absolutely forbidden to use the Website in a situation where in a third country, i.e. a country outside the European Union, the obligation to settle VAT lies with the entity providing the services - in this case the Service Provider, and not with the recipient, i.e. the Client.
8. The Service Provider hereby declares that it does not provide tax advice. If the Client is in doubt as to the determination of the correct VAT rate, consultation with a locally competent tax advisor is recommended.
9. The Service Provider shall not be liable for incorrect determination of the VAT rate by the Client, and shall not be liable for incorrect settlement of the Client with the relevant tax authority for the conclusion of the Digital Content Delivery Agreement.

### 04. USE OF THE WEBSITE

1. In order to use the Website, the Client should have a device that allows the use of the Internet, a connection to the Internet, a browser that allows the display of web pages, such as Microsoft Edge versions 111 and above, or Firefox versions 111 and above, or Google Chrome versions 111 and above, or Safari 16.4 or above, with cookies enabled, supporting encrypted SSL connections and JavaScript, and a Wallet with Web3 connectivity.
2. The Client using the Site, is obliged to provide correct, valid and complete data.
3. The Client is obliged to use the Website in accordance with the provisions of these Terms and Conditions and in accordance with the rules of social intercourse, by, in particular:
   1. not to take actions such as: sending or posting unsolicited commercial information (spam) on the Website;
   2. timely payment of the Price and other costs agreed upon by the Client and the Seller in the full amount indicated on the individual subpage of the Website, in view of entering into the Digital Content Delivery Agreement;
   3. not to provide and not to post on the Website any content prohibited by generally applicable laws or provisions of these Terms and Conditions;
   4. use of any Content posted on the Website for your own personal use only;
   5. not to create Token Pages that impersonate third parties or infringe intellectual property rights.
4. The Service Provider declares that it makes every effort to provide Clients with continuous access to the Website and the Services provided through it. However, the Service Provider does not guarantee that the use of the Website, including the use of the Services, will be without errors or technical interruptions. The Service Provider reserves the right to suspend or restrict access to the Website at any time, without prior notice to Clients. At the same time, the Service Provider reserves the right to change the technical requirements for the use of the Website at any time, and reserves the right to suspend or restrict access to the Website at any time.
5. The Service Provider is not responsible for the content of other websites and portals to which the Client may be redirected using links placed on the Website in the form of, for example, advertisements or other sponsored content.
6. The Service Provider reserves the right to interfere with the technical structure of the Client's panel through which the Services are used, in order to diagnose irregularities in the functioning of a particular Service, and may make changes and in any other way interact with the technical side of the panel, in order to modify it or restore the proper functioning of the panel itself or the Website.

### 05. TOKEN PAGES

1. Clients may create public token pages on the Website for tokens created through Services.
2. By creating a Token Page, the Client declares that:
   1. all information provided is accurate and not misleading;
   2. the Client has all necessary rights to use the content (e.g. logos, descriptions);
   3. the Token Page does not infringe third-party intellectual property rights;
   4. the Token Page does not impersonate or create confusion with existing tokens, projects, or brands (including stablecoins such as USDC, USDT, etc.);
   5. the Token Page does not violate applicable Polish or EU law.
3. The Service Provider reserves the right to immediately remove any Token Page that violates these Terms, infringes third-party rights, or violates applicable law, without prior notice.
4. Where the Service Provider removes or disables access to a Token Page, it will, as a rule, provide the Client with a statement of reasons for that decision, unless the Service Provider is legally prohibited from doing so or providing such information would undermine the prevention, detection or investigation of illegal content or other unlawful activity. Removal of a Token Page does not affect the existence of the token on any blockchain and does not entitle the Client to a refund, unless mandatory law provides otherwise.
5. The Client may submit a complaint against a content moderation decision (including removal or restriction of a Token Page) within 6 months from the decision date by contacting <contact@20lab.app>. Complaints will be handled in a timely, diligent and objective manner.
6. Intellectual property complaints must be submitted to <contact@20lab.app> and include:
   1. identification of the infringed right;
   2. identification of the infringing Token Page;
   3. contact information and statement of good faith belief;
   4. signature of the complainant or authorized representative.
7. The Service Provider will review complaints within 14 working days.
8. The Service Provider does not verify Token Page content and is not liable for information provided by Clients or any losses arising from Token Pages.
9. The Client agrees to indemnify the Service Provider from any claims, damages, or costs arising from content posted on Token Pages or violations of these Terms. This indemnity obligation applies only to Clients who are not Consumers.

### 06. PRIVACY OF USER DATA

1. The Personal Data Administrator is the Service Provider, in accordance with the information set forth in the privacy policy made available through the Website and attached to these Terms and Conditions.

{% content-ref url="/pages/0mgYSZciuuPjFbKq1ShW" %}
[Privacy Policy](/privacy-policy)
{% endcontent-ref %}

2. The Personal Data Administrator strives to ensure that the processing of Clients' personal data occurs with the greatest respect for the privacy of the Clients whose personal data is processed, but also with the utmost care for the security of the processed personal data.
3. The Personal Data Controller has exercised due diligence and taken all measures provided for by generally applicable law to secure personal data.
4. The Personal Data Administrator uses technical and organizational measures aimed at ensuring the protection of the processed personal data at the highest possible level, and preventing access to it by unauthorized persons.

### 07. INTELLECTUAL PROPERTY RIGHTS

1. Unless otherwise indicated, all rights in and to the Website, including but not limited to, proprietary copyrights, intellectual property rights, trademarks, Internet domains, electronic forms and documents posted on the Website, including text, graphics and images, are owned by 20LAB or our licensors or suppliers and are protected by applicable intellectual property laws. The Service Provider does not grant any implied license to use the content of the Website or the Services.
2. By submitting User Content, the Client grants the Service Provider a non-exclusive, worldwide, royalty-free license to host, store, reproduce, display and technically process such User Content solely for the purpose of operating the Website and providing the Services.
3. The Client, by accepting the Terms and Conditions, declares that the materials and content contained on the Website or provided through the Website or through the Services are provided solely for his/her personal lawful use.
4. The Client declares and acknowledges that the use of the Website in any other manner than that explicitly stated in the Terms and Conditions is strictly prohibited.
5. Client may not sell or modify materials derived or created from the Website or Services, or reproduce, display, publicly perform, distribute or otherwise use the materials in any way for public or commercial purposes. Such use of materials on any other website or file-sharing or similar service for any purpose is strictly prohibited.
6. All rights to use materials on or through the Website or the Services not expressly granted herein are reserved in their entirety to 20LAB. The Service Provider will remove content that infringes third-party intellectual property rights upon valid complaint.

### 08. LIABILITY AND RIGHT TO OPT OUT OF THE CONTRACT

1. The Service Provider shall be liable for the due performance of the provisions of these Terms and Conditions on a general basis, and the obligations of the Service Provider provided for in these Terms and Conditions shall be treated as obligations of diligence and with the normal diligence prescribed for this type of relationship.
2. The Seller's liability for improper performance of the Contract, is limited to the equivalent of the Price paid by the Client.
3. The Service Provider informs, and the Client (including the Client who is a Consumer) accepts, that the right of withdrawal with respect to Digital Content Delivery Contracts, with regard to access to the Services, **is excluded under Article 38 (1) (1); (2) and (13) of the Consumer Rights Act**, due to the delivery to the Client of digital content that is not recorded on a tangible medium, which at the same time is linked to a financial market over which the Seller does not exercise control, resulting in high price volatility in these markets, and in view of their immediate access.

### 09. RESERVATIONS REGARDING WARRANTY AND LIABILITY OF SERVICE PROVIDER

1. The Service Provider declares, and the Client agrees, that there can be no guarantee that the Services or software available on the Website (a) will always meet the Client's requirements (b) will always be accurate, timely and error-free, (c) will always be reliable, legal, secure and free of any kind of virus, malicious code.
2. The Service Provider is not responsible for the content and functionality of the Providers' sites linked to the Website.
3. The Service Provider shall not assume any responsibility or liability to the Clients for any losses. In particular, Service Provider shall not be liable for any loss caused by the use of crypto assets, including, but not limited to, any loss, damage or claim resulting from: (a) Client error, such as forgotten passwords, misconstrued transactions, or misspelled addresses; (b) server failure or data loss; (c) corrupted wallet files; (d) unauthorized access to the application; (e) any unauthorized acts of third parties, including, without limitation, the use of viruses, phishing, forcible attacks or other means of attack on the service or crypto assets.
4. Crypto assets are intangible digital assets. They exist solely by virtue of a record of ownership. Any transfer of title that may occur for any unique digital asset occurs in a decentralized registry within the supported platforms of the Website. We do not guarantee that 20LAB or any 20LAB party can affect the transfer of title or rights to any crypto assets. Here you can check which platforms (blockchains) are currently supported:

{% content-ref url="/pages/FE9dFnDO5UHJv8x1otu1" %}
[Smart Contracts](/smart-contracts)
{% endcontent-ref %}

5. The Service Provider shall not be liable for losses incurred as a result of vulnerabilities or any type of malfunction, abnormal behavior of the software (e.g. wallet, smart contract), blockchain or other functions of crypto assets.
6. The Service Provider is not responsible for losses incurred as a result of late notification by Clients or other cooperating third parties of any problems with the blockchain supporting crypto assets, including forks, technical problems with the node or any other problems causing losses.
7. Clients and third parties may report violations, complaints, including appeals of the Service Provider's decisions to the Service Provider's e-mail address. The notification must include:
   1. designation of Client's data;
   2. precise description of the application.
8. The Service Provider shall provide information on the recognition of the complaint by e-mail immediately, but no later than within 14 days of its receipt. The Service Provider stipulates that the consideration of the application may require additional explanations from the applicant, with the time of response by the Service Provider, each time extending the period of recognition of the complaint accordingly.
9. Submission by the applicant of a claim in electronic form is equivalent to consent to receive a response from the Service Provider in electronic form.
10. The Service Provider shall not be liable for any on-chain effects, economic consequences or third-party impacts resulting from the Client’s use of post-creation management tools.

### 10. SALVATORY CLAUSE

The lack of legal basis or incompleteness of any of the clauses contained in the Terms and Conditions does not mean that the entire Terms and Conditions lose legal force. The provisions shall be changed to those that best reflect its meaning and purpose of the existing provisions.

### 11. FINAL PROVISIONS

1. The Service Provider has the right to change these Terms and Conditions without giving any reason. If the Client does not agree to the change of the Terms and Conditions, he must stop using the Website.
2. The Client acknowledges and accepts that all disputes that may arise under these Terms and Conditions should first be resolved amicably, by mutual agreement between the Client and the Seller. The Client acknowledges and accepts that amicable settlement of the dispute is a condition precedent that must be fulfilled before any legal proceedings can be initiated against the Service Provider.
3. If it is not possible to resolve a dispute amicably in accordance with the paragraph above, the provisions of these Terms and Conditions will be resolved by a court of competent jurisdiction for the current location of the Seller. At the same time, the Client acknowledges and accepts that disputes arising from these Terms and Conditions may be resolved exclusively on the basis of the individual situation of the Client. The Seller is in no way obliged to resolve disputes of a class action nature. The Client also acknowledges and accepts that any potential claims should be addressed exclusively to the entity (Seller) that performs the particular Service for the Client.
4. The Client, who is a Consumer, has the right to use out-of-court ways of handling complaints and claims. For this purpose, the Client has the option of resolving disputes electronically through the EU online ODR platform available at <http://ec.europa.eu/consumers/odr/>.

### CONTACT US

To resolve a complaint about the Website or to obtain further information about the use of the Website, please contact us at:

E-mail address: <contact@20lab.app>


# Privacy Policy

Last updated: July 7, 2025

Please read these privacy policy carefully before using our Service.

The data administrator is 20LAB spółka z ograniczoną odpowiedzialnością with its registered office at the address: ul. Dmowskiego 3/9, 50-203 Wrocław.

Your privacy is important to us. It is 20LAB’s policy to respect your privacy regarding any information we may collect from you across our Website. This Privacy Policy governs the manner in which 20LAB (“we”, “our”) uses, maintains and discloses information collected from its user/visitor (“you”, “your”) of [20lab.app](https://20lab.app/) website as well as any other media form, media channel, mobile website or mobile application related, linked, or otherwise connected thereto (collectively, the “Website”).

You agree that by accessing the Website, you have read, understood, and agree to be bound by this Privacy Policy. We expect to you carefully go through this policy before using the Website.

### 01. INFORMATION WE COLLECT

Information we collect directly from you: For the purposes stated in Section “HOW WE USE THE COLLECTED INFORMATION”, we collect information about you as described in this Section. The categories of personal information that we collect directly from you are:

1. Identifiers, such as (i) Device identifiers, including the IP address, type of device, device unique ID, advertising related identifiers, (ii) Settings and configurations, we keep your configuration and settings, including resource identifiers such as URLs. This includes service and security settings for data and other resources.
2. Communication, such as the questions and responses that you make in our type forms, or when you seek for technical support.
3. Geolocation data, such as precise location, with your prior consent, while you are using the Services.
4. Internet or other electronic network activity information, such as information about your usage of the Services, operational status, online behavior while you use our Services, and other technical details necessary to operate and maintain the Services.
5. Some of this information we collect automatically from you, e.g. data collected using cookies and other device identifying technologies.

Information we collect from other sources: We may collect information about you from other sources such as Google and Sentry.io, but only at your request, to access you in our Services. The categories of information that we may collect about you from other sources are: Identifiers, such as (i) device identifiers, (ii) settings and configurations; Geolocation data; Internet or other electronic network activity information.

### 02. HOW WE USE THE COLLECTED INFORMATION

We collect, store, and use your information in order to serve the following purposes:

1. Provide you the Services. We process information to provide you proper Services on our Website, and to monitor the usage of the Services to detect, prevent and address technical issues.
2. Provide you support. We process information to notify you about changes and updates to our Services, and to deal with your inquiries and requests.
3. Fulfill our legal obligations. We use information to comply with legal obligations to which we are subject and cooperate with regulators and law enforcement bodies and for security purposes such as fraud and spam prevention or to enforce our terms of use.
4. Improve the Services for you. We analyze information about how you use the Services to provide an improved experience for you and all users and improve our services and for business development.
5. Communicating with you. We may contact you with news, general information, marketing and offers relating to products and services offered by us (unless you have opted out of marketing, or we are otherwise prevented by law from doing so). We may invite you to take part in customer surveys, questionnaires and other market research activities carried out by us and to allow you to participate in special features of our Services.

Data will be processed based on your consent (legal basis: Article 6(1)(a) of the GDPR) and our legitimate interest (legal basis: Article 6(1)(f) of the GDPR), and legal obligation (legal basis: Article 6(1)(c) of the GDPR).

### 03. SHARE INFORMATION WITH OTHERS

We may disclose and share information for business purposes to the following parties:

1. Service providers and business partners. We may share information with our service providers and business partners that perform marketing services and other business operations for us in order to provide you the Services (as data processors).
2. Where we share information with services providers and partners, we ensure they only have access to such information that is strictly necessary for us to provide the Services. These parties are required to secure the data they receive and to use the data for pre-agreed purposes only, while ensuring compliance with all applicable data protection regulations.
3. Law enforcement agencies, courts, regulators and government authorities. We may share your information with these parties where we believe this is necessary to comply with a legal or regulatory obligation, or otherwise to protect our rights or the rights of any third party.
4. Asset purchasers. We may share your information with any third party that purchases, or to which we transfer, all or substantially all of our assets and business. Should such a sale or transfer occur, we will use reasonable efforts to try to ensure that the entity to which we transfer information uses it in a manner that is consistent with this privacy notice.
5. Advertising partners. We may also disclose or share your personal information with other third parties, where you consent if it is required, for advertising purposes. We may share your unique advertising identifier and technical data about you (language preference, country, age range, gender and device data).

### 04. INTERNATIONAL DATA TRANSFERS

Our Services are global; therefore, your personal information may be transferred to, stored, processed in a country that is not regarded as ensuring an adequate level of protection for personal information. The main country where we process your information is Poland.

If you are located outside the Poland, please note that we will store and process your personal information there, and we also use services providers and business partners located in different places around the world.

In addition to ascertaining the privacy protection legal systems of those countries and regions, we have put in place appropriate safeguards (such as contractual commitments) in accordance with applicable legal requirements to ensure that your personal information is adequately protected. For more information on the appropriate safeguards in place, please contact us at:

E-mail address: <contact@20lab.app>

### 05. COOKIES

We use “cookies” to collect information about you and your activity across our Website. A cookie is a small piece of data that our Website stores on your computer, and accesses each time you visit, so we can understand how you use our Website. This helps us serve you content based on preferences you have specified. Cookies cannot pass viruses, harm your computer or pass on private information such as an email address without the user's intervention. Cookies contain session identification numbers that allow our systems to recall previous sessions for authentication efforts and assemble information from our gathered data. You can configure your computer's browser to alert you when a Website is attempting to send you a cookie and allow you to accept or refuse the cookie. In addition to cookies, we may use small bits of computer code called "one-pixel GIFs," "clear GIFs," or "web beacons" embedded in web pages to monitor Website activity. We use this collected electronic data to better design our Website. We also collect statistical data on how our app is used and the User Content created with it. Please refer to our Cookie Policy for more information.

{% content-ref url="/pages/e8nKwRoHSllWAgEBPsHs" %}
[Cookie Policy](/cookie-policy)
{% endcontent-ref %}

### 06. SECURITY OF YOUR INFORMATION

We operate secure data networks protected by industry standard firewall and password protection systems. Our security and privacy policies are periodically reviewed and enhanced as necessary. Only authorized individuals have access to the information provided by our Clients.

### 07. LINKS TO THIRD PARTY SITES

Please be aware that our Website may contain links to other sites hosted by third parties. We don’t control and is thus not responsible for the content or privacy practices and policies of such other sites.

### 08. RIGHT OVER YOUR INFORMATION

Where applicable law requires (and subject to any relevant exceptions under law), you may have the right to access, update, change or delete your personal information.

You can access, update, change or delete personal information by contacting us.

### 09. DATA RETENTION PERIOD

For data processed based on your consent, such data will be processed until you withdraw your consent.

For data processed based on the Controller’s legitimate interest, such data will be processed until an objection is made.

The data provided through the contact form will be processed for a period of 3 years in order to preserve the principle of accountability.

### 10. CHANGES OF POLICY

We reserve the right to amend or update any portion of this policy at any time for operational, legal or regulatory reasons without any prior declaration or notification. To keep yourself upgraded with the policy read it at a regular interval.

### 11. CONTACT US

In order to resolve a complaint regarding the Data Privacy or to receive further information regarding this Privacy Policy, please contact us at:

E-mail address: <contact@20lab.app>


# Cookie Policy

Last updated: July 30, 2024

20LAB (“we”, “our”) uses cookies to help improve User (“you”, “your”) experience of [20lab.app](https://20lab.app/). This cookie policy is part of our Privacy Policy, and covers the use of cookies between your device and our Website. You can find more information about cookies and how they work here <https://www.aboutcookies.org/>.

If you don’t wish to accept cookies from us, you should instruct your browser to refuse cookies from our Website, with the understanding that we may be unable to provide you with some of your desired Content and Services.

### 01. WHAT IS A COOKIE

A cookie is a small piece of data that a Website stores on your device when you visit, typically containing information about the Website itself, a unique identifier that allows the Website to recognize your web browser when you return, additional data that serves the purpose of the cookie, and the lifespan of the cookie itself.

Cookies are used to enable certain features (i.e. logging in), to track Website usage (i.e. analytics), to store your user settings (i.e. time zone, notification preferences), and to personalize your content (i.e. advertising, language).

### 02. TYPES OF COOKIE WE USE

#### Functional Cookies

This type of cookies helps the user to view the Website, use the function as well as help to gain access to the secured parts of the Website. Without using such types of cookies, it will have the following results:

1. Using various parts of the Website will become impossible.
2. We can only provide less support to the user.
3. We won't be able to remember your specific preferences or display the specific functionality (e.g. language preference).

#### Analytics Cookies

These types of cookies help us to improve our Website. One of the examples of such types of cookies is web analytics cookies. These cookies gather information about the following:

1. Which visitors use the Website and how many times.
2. Most visited pages by the user.
3. Displayed error messages.

#### Marketing and Advertising Cookies

These types of cookies are typically used for advertising networks that act as intermediaries between us and advertisers. Such cookies used for:

1. Displaying relevant, personalized advertisements or offers.
2. Limiting the number of advertisements display.
3. Detect and defend against frauds and other risks to give protection to our users and partners.
4. It helps to improve our products.

#### Third-Party Cookies

We also use some third-party cookies and we do not control the operation of any of them.

### 03. WHY WE USE COOKIES

We use cookies to (a) make the Website work as you’d expect and make your visit more personal, (b) remember your settings during and between the visits, (c) improve the speed and security of the Website, (d) continuously improve the Website for your convenience.

We use cookies not to (a) collect any personally identifiable information without your permission, (b) collect any sensitive information without your permission, (c) transfer any personally identifiable data to third parties.

### 04. ADJUSTING COOKIE SETTINGS

If you want you can choose not to allow cookies on your browser and adjust the browser settings to delete our cookies or prevent the cookies set by third parties. But deleting certain specific cookies may hamper your experience on our Website as certain parts or pages will not be loaded.

### 05. CONTACT US

In order to resolve a complaint regarding cookie policy of our Website or to receive further information regarding cookie settings, please contact us at:

E-mail address: <contact@20lab.app>


# 20lab Referral Program T\&C

Last updated: October 3, 2024

These terms and conditions ("Terms") govern your participation in the 20lab Referral Program ("Program"). By participating in the Program, you agree to comply with these Terms. The Program page ("Program page"), accessible at <https://20lab.app/dashboard/refer-and-earn>, serves as the central hub for all Program-related activities, including tracking deployed tokens, claiming rewards, and accessing important information.

**1. Eligibility**

* The Program is open to all individuals, with the exception of Polish residents.

**2. Program Structure**

* Participants will be provided with a unique referral link.
* Rewards are granted based on the number of tokens generated through the participant's referral link on Mainnets. Check the list of available Mainnets here:

{% content-ref url="/pages/FE9dFnDO5UHJv8x1otu1" %}
[Smart Contracts](/smart-contracts)
{% endcontent-ref %}

**3. Referral Link Usage**

* Participants are responsible for the proper use and dissemination of their referral link.
* Misuse, spam, or any unethical promotional activities are strictly prohibited.

**4. Rewards**

* Rewards are granted based on the number of tokens generated through the participant's referral link.
* Participants will receive rewards in ETH, with a base rate of $20 worth of ETH per token deployed.
* The actual reward amount may vary based on the current market price of ETH.
* The conversion rate used for rewards will be determined at the time of approving the claim request which was sent by participant.

**Example:** If the base rate is $10 per token and the current market price of ETH is $2000, a participant will receive approximately 0.005 ETH ($10 / $2000) for each token deployed through their referral link.

**Note:** The reward structure is subject to change, and participants will be notified of any adjustments on the Program page.

**5. Token Generation**

* Only Mainnet tokens are eligible for reward consideration.
* The participant earns rewards for each Mainnet token generated through their referral link.

**6. Claiming Rewards**

* Participants may claim their rewards through the Program page.
* Rewards are distributed in ETH and are subject to a conversion rate applicable at the time of distribution.
* Participants must claim their rewards before or within 3 months after the expiration of their referral link.

**7. Validity Extension**

* Default referral link lifetime is 90 days.
* The validity period of the referral link can be extended by the participant after 15 days.
* Participants can extend the validity by visiting the Program page and following the provided instructions for extension.
* The extension process is designed to ensure active and engaged participants continue to benefit from the Program.

**8. Termination**

* 20lab reserves the right to terminate the Referral Program or a participant's involvement at any time and for any reason, including, but not limited to, the following:
  * **Violation of Terms:** Any breach of these terms and conditions, including improper use of referral links or engaging in fraudulent activities.
  * **Abuse of Program:** Any attempt to manipulate, exploit, or undermine the integrity of the Program.
  * **Unethical Practices:** Engaging in spam, misleading advertising, or any practices deemed unethical by 20lab.
  * **Technical Issues:** Any disruptions, technical issues, or unforeseen circumstances that compromise the Program's functionality.
  * **Misuse of Rewards:** Any attempt to abuse or misuse rewards, including but not limited to claiming rewards without legitimate referrals.
  * **Legal Compliance:** Failure to comply with applicable laws, regulations, or legal requirements.

Termination decisions are at the sole discretion of 20lab, and participants will be notified if their involvement in the Program is terminated. In case of termination, participants may lose access to accrued rewards.

**9. Modification of Terms**

* 20lab reserves the right to modify these Terms at any time. Participants will be notified of any changes on the Program page.

**10. Privacy**

* Participant information will be handled in accordance with our Privacy Policy.

**11. Limitation of Liability**

* 20lab is not responsible for any technical issues, disruptions, or errors that may affect the Program.

By participating in the 20lab Referral Program, you acknowledge that you have read, understood, and agreed to these Terms. These Referral Program Terms and Conditions supplement our general Terms of Service. In case of any inconsistencies, the Terms of Service shall prevail.

20lab reserves the right to interpret, modify, or terminate the Program at its sole discretion.

If you have any questions or concerns, please contact us at:

E-mail address: <contact@20lab.app>


