Automatic Token Listing on DEX at Hardcap

We design and develop full-cycle blockchain solutions: from smart contract architecture to launching DeFi protocols, NFT marketplaces and crypto exchanges. Security audits, tokenomics, integration with existing infrastructure.
Showing 1 of 1All 1305 services
Automatic Token Listing on DEX at Hardcap
Medium
~3-5 days
Frequently Asked Questions

Blockchain Development Services

Blockchain Development Stages

Latest works

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1361
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1251
  • image_websites_belfingroup_462_0.webp
    Website development for BELFINGROUP
    957
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1189
  • image_logo-advance_0.webp
    B2B Advance company logo design
    646
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    929

Auto-listing System on DEX upon Reaching Capitalization

Imagine you raised 200 ETH in presale but listing on Uniswap is delayed due to manual liquidity addition. Investors get nervous, rumors of a rug pull spread, and the price drops. Our solution eliminates the human factor: the smart contract automatically creates the pool and locks LP tokens once the hardcap is reached. This application has been used in projects with over $50 million in total liquidity. We are a team with over 5 years of experience and 50+ implemented presale contracts on Ethereum, BNB Chain, and Polygon. Typical hardcaps range from 100 to 500 ETH, and the liquidity share placed into the pool is 70% of raised funds.

How Automatic Listing on DEX Works

The presale smart contract acts as an escrow agent. Raised funds (ETH/USDC) and project tokens are held until conditions are met. When the sum reaches the softcap or hardcap, the contract autonomously calls the DEX router to create a pool and add liquidity. LP tokens are burned (address 0xdead) or sent to a lock contract, making liquidity non-withdrawable. This eliminates the human factor and protects participants.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "@openzeppelin/contracts/access/Ownable2Step.sol";
import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";

interface IUniswapV2Router02 {
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    
    function factory() external pure returns (address);
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

contract AutoListingPresale is Ownable2Step, ReentrancyGuard {
    using SafeERC20 for IERC20;
    
    IERC20 public immutable token;
    IUniswapV2Router02 public immutable router;
    
    uint256 public immutable softCap;
    uint256 public immutable hardCap;
    uint256 public immutable tokenPrice;
    uint256 public immutable listingPercent;
    uint256 public immutable listingTokenPercent;
    uint256 public immutable saleEnd;
    
    uint256 public totalRaised;
    bool public finalized;
    bool public listed;
    address public liquidityPair;
    
    mapping(address => uint256) public contributions;
    
    event Contribution(address indexed contributor, uint256 ethAmount);
    event Finalized(bool success, uint256 totalRaised);
    event ListedOnDEX(address pair, uint256 ethLiquidity, uint256 tokenLiquidity);
    event Refunded(address indexed contributor, uint256 amount);
    
    constructor(
        address _token,
        address _router,
        uint256 _softCap,
        uint256 _hardCap,
        uint256 _tokenPrice,
        uint256 _listingPercent,
        uint256 _listingTokenPercent,
        uint256 _saleEndTimestamp,
        address _owner
    ) Ownable2Step() {
        token = IERC20(_token);
        router = IUniswapV2Router02(_router);
        softCap = _softCap;
        hardCap = _hardCap;
        tokenPrice = _tokenPrice;
        listingPercent = _listingPercent;
        listingTokenPercent = _listingTokenPercent;
        saleEnd = _saleEndTimestamp;
        _transferOwnership(_owner);
    }
    
    receive() external payable {
        _contribute(msg.sender, msg.value);
    }
    
    function contribute() external payable nonReentrant {
        _contribute(msg.sender, msg.value);
    }
    
    function _contribute(address contributor, uint256 amount) internal {
        require(!finalized, "Presale finalized");
        require(block.timestamp < saleEnd, "Sale ended");
        require(totalRaised + amount <= hardCap, "Hard cap reached");
        require(amount > 0, "Zero contribution");
        
        contributions[contributor] += amount;
        totalRaised += amount;
        
        emit Contribution(contributor, amount);
        
        if (totalRaised >= hardCap) {
            _finalize();
        }
    }
    
    function finalize() external {
        require(block.timestamp >= saleEnd || totalRaised >= hardCap, "Too early");
        require(!finalized, "Already finalized");
        _finalize();
    }
    
    function _finalize() internal {
        finalized = true;
        bool success = totalRaised >= softCap;
        
        emit Finalized(success, totalRaised);
        
        if (success) {
            _listOnDEX();
        }
    }
    
    function _listOnDEX() internal {
        require(!listed, "Already listed");
        listed = true;
        
        uint256 ethForLiquidity = totalRaised * listingPercent / 100;
        uint256 totalTokens = token.balanceOf(address(this));
        uint256 tokensForLiquidity = totalTokens * listingTokenPercent / 100;
        
        token.safeApprove(address(router), tokensForLiquidity);
        
        (uint256 addedToken, uint256 addedETH, uint256 lpTokens) = router.addLiquidityETH{
            value: ethForLiquidity
        }(
            address(token),
            tokensForLiquidity,
            tokensForLiquidity * 95 / 100,
            ethForLiquidity * 95 / 100,
            address(0xdead),
            block.timestamp + 600
        );
        
        address factory = router.factory();
        liquidityPair = IUniswapV2Factory(factory).getPair(
            address(token),
            0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
        );
        
        emit ListedOnDEX(liquidityPair, addedETH, addedToken);
        
        uint256 remaining = address(this).balance;
        if (remaining > 0) {
            payable(owner()).transfer(remaining);
        }
    }
    
    function claimRefund() external nonReentrant {
        require(finalized, "Not finalized");
        require(totalRaised < softCap, "Presale successful, no refund");
        
        uint256 amount = contributions[msg.sender];
        require(amount > 0, "No contribution");
        
        contributions[msg.sender] = 0;
        payable(msg.sender).transfer(amount);
        
        emit Refunded(msg.sender, amount);
    }
    
    function claimTokens() external nonReentrant {
        require(finalized && listed, "Not listed yet");
        
        uint256 contribution = contributions[msg.sender];
        require(contribution > 0, "Nothing to claim");
        
        uint256 participantTokens = token.balanceOf(address(this)) 
            * contribution / totalRaised;
        
        contributions[msg.sender] = 0;
        token.safeTransfer(msg.sender, participantTokens);
    }
}

Which Risks Auto-Listing Eliminates

Manual listing introduces delay and risk. The team may change their mind, make parameter errors, or fall victim to MEV attacks. Automation guarantees that liquidity is added exactly at the target moment with predefined proportions. This boosts investor confidence and avoids scandals. Transaction fee savings reach up to 30% due to gas optimization in our contract, which can save project teams over $50,000 in gas fees. Losses from sandwich attacks during manual listing can amount to 10% of the pool volume.

Parameter Uniswap V2 Uniswap V3
Integration complexity Low (single addLiquidityETH call) Medium (requires pool init, tick calculation)
WETH requirement No Yes (ETH converted to WETH)
Range control Fixed (all prices) Configurable (concentrated liquidity)
Sandwich attack risk Medium (if slippage = 0) Medium (better protection via price range)
Ideal scenario Fast projects, minimal complexity Projects with long-term liquidity, team for customization

Comparison of Liquidity Locking Methods

Parameter Burn Lock (temporary)
Irreversibility Complete Partial (return after term)
Investor trust Maximum High
Flexibility None Can set lock period
Error risk Minimal Medium (lock contract must be reliable)
Ideal scenario Memecoins, short-term projects Projects with long-term plans

OpenZeppelin ReentrancyGuard is used to protect all public functions that transfer funds.

What's Included in Development (Deliverables)

  • Presale contract with multi-DEX support, configurable parameters (softcap, hardcap, liquidity percentage).
  • LP locker (optional) for time-locking LP tokens.
  • Integration with chosen DEX (Uniswap V2/V3, Raydium, PancakeSwap).
  • Fork tests (Foundry/Hardhat) with 95% code coverage.
  • Documentation: interface descriptions, parameters, usage examples.
  • Support for 1 month after code delivery.

How We Do It

Our stack: Solidity 0.8.24, Foundry for testing, OpenZeppelin for audited solutions. We use the Slither static analyzer and Echidna fuzzer for vulnerability discovery. A practical example: for a project with a hardcap of 200 ETH, we configured listing on Uniswap V2 with LP burning. After launch, the pool was created in 1 block, slippage was 2% (below the 5% cushion). All participants successfully claimed tokens via claimTokens. An external audit found 0 critical and 0 severe vulnerabilities.

Process

  1. Analysis — discuss requirements, select DEX, calculate parameters (price, listing percentage).
  2. Design — contract architecture, specification of events and functions.
  3. Implementation — write smart contracts (presale, locker if needed).
  4. Testing — unit tests, integration tests on fork, front-running simulation.
  5. Audit — internal + external (optional).
  6. Deployment — deploy via multisig, verify on Etherscan.

Why Use Auto-Listing?

Auto-Listing eliminates human errors and delays, guarantees fair liquidity distribution, and protects against manipulation. Investors see a transparent mechanism, increasing trust and attracting capital. Compared to manual listing, the automated process is 10x faster and reduces costs by an average of 25%.

Timeline and Cost

Estimated timeline: 2 to 3 weeks for a basic solution (presale + listing on one DEX). Cost is calculated individually — contact us for an assessment of your project and an optimal quote.

Safety and Common Mistakes

Expand details
  • Reentrancy — we use nonReentrant on all public functions that transfer funds.
  • Slippage — do not set 0 in amountTokenMin and amountETHMin; 3–5% protects against sandwich attacks.
  • Front-running — for V3, setting a wide range (tickLower = -887220, tickUpper = 887220) minimizes risks.
  • LP burn vs lock — burning is simpler, but locking gives flexibility; choose based on the specific project.

Get a consultation for your project — reach out to us, and we will prepare a demo version of the contract.

Token Development: ERC-20, Tokenomics, Vesting

We’ve seen more rekt tokens than we can count — not because the code was broken, but because the economic assumptions were naive. A token that doesn’t collapse from inflation in six months, where governance actually works, and vesting can’t be bypassed through delegation tricks — that’s real engineering. We build under that standard.

How We Avoid Common ERC-20 Pitfalls

ERC-20 standard has nine functions. Complexity starts with extensions:

ERC-20Permit (EIP-2612) — gasless approve via signature. User signs permit(owner, spender, value, deadline, v, r, s) off-chain, spender calls permit() + transferFrom() in one transaction. Removes separate approve step. Risk: signature can be intercepted — need deadline and nonce checking. We always implement EIP-712 typed structured data to prevent signature malleability.

ERC-20Votes (EIP-5805) — snapshot balances for governance. Checkpoint system stores balance history by block number. getPastVotes(address, blockNumber) returns balance at proposal creation, not current. Prevents flash loan governance: can't borrow tokens and vote in one transaction.

Rebasing tokens (stETH, Ampleforth) — balanceOf changes automatically through internal shares ratio. High integration complexity: most DeFi protocols don't work correctly with rebasing without non-rebasing wrapper. We've deployed wrappers that decouple balance from share price for Uniswap compatibility.

Fee-on-transfer tokens — percentage cut on every transfer. Breaks AMM calculations: pool receives less than expected. Uniswap v2/v3 don't support natively — needs special pair/router. We’ve built custom routers that handle fee-on-transfer tokens without reverting.

Why Tokenomics Sustainability Matters More Than Excel

Tokenomics isn't Excel table summing to 100%. It's incentive model that either works long-term or creates selling pressure killing the project.

Emission Schedule and Inflation — Fixed supply (Bitcoin model) works for store-of-value, but for utility tokens you need controlled inflation. Inflationary model (like Ethereum post-Merge) generates new tokens to incentivize participants. Key balance: emission should be <= value captured by protocol. If protocol earns $100k/month but emission is $500k/month in market value — constant selling pressure inevitable. We model these scenarios using Python simulations with cadCAD for complex systems.

Supply Distribution — No universal formula. Principle: no single entity >33% voting power at launch. Otherwise governance is fiction.

Category Typical Range Risk
Team + advisors 15–20% Dumping on unlock
Investors (seed, private) 15–25% Coordinated exit
Treasury / DAO 20–35% Governance capture
Ecosystem / grants 10–20% Inefficient allocation
Public sale / LBP 5–15% Undervaluation → whale capture
Liquidity provision 5–10% Mercenary capital

What Are the Most Critical Vesting Contract Mistakes?

Linear vesting with cliff is standard for team and investors. cliff is the period after TGE with zero availability. After cliff: linear unlock until duration. Typical implementation errors we catch in audit:

  • Revocable vesting without timelock — owner can revoke immediately. Solution: revocation through multisig + governance vote with 7-day delay.
  • Cliff doesn't block governance rights — with ERC-20Votes, recipient can delegate voting power from day one even if tokens aren't unlocked. We explicitly separate voting power from claim logic.
  • No emergency pause — if vesting contract vulnerability discovered, need ability to pause claims. Pausable + timelock on unpause.

We’ve seen a project where the cliff was set to 0 by mistake — team could dump immediately. Our fuzz tests catch such edge cases before deployment.

Vesting contract implementation details

Pausable and Ownable2Step from OpenZeppelin are standard. We add a 7-day timelock on revocation functions. All withdraw functions emit events for off-chain tracking. Fuzz tests verify that cumulative released amount never exceeds total allocation, even after multiple revocations or partial claims.

Why Is Liquidity Bootstrapping Crucial for Token Launch?

Launch mechanics are critical. Three main approaches:

  • Balancer LBP — temporary pool with high initial token weight (90/10 project-token/USDC) that automatically decreases to 50/50 over days. Creates downward price pressure preventing bot buys at one price. After LBP liquidity moves to permanent pool.
  • Fjord Foundry — specialized platform for LBP and fair launches. Less operational overhead than direct Balancer integration.
  • Uniswap v3 with limited range — add liquidity in narrow range around initial price. High capital efficiency but requires active range management.
  • TWAMM — mechanics for gradual large-order sales without slippage. Implemented in FraxSwap.

LBP is 3-5x better than standard AMM listing for price discovery; we’ve seen fair launches with 50% less initial dump compared to direct Uniswap listings.

Governance Tokens and Voting Mechanics

OpenZeppelin Governor is the standard. Modular: GovernorVotes for counting, GovernorTimelockControl for timelock execution, GovernorSettings for adjustable parameters. Quorum is minimum percentage of supply for voting validity. Compound set quorum at 400k COMP (4% supply). We set quorum dynamically based on historical participation to avoid apathy or whale capture.

Flash loan governance attack — attacker borrows tokens via flash loan, delegates to self, creates proposal or votes, returns tokens. ERC-20Votes with block-based snapshot completely blocks this: must have tokens at snapshot creation moment, not voting moment.

Delegation — small holders often don't vote. Liquid delegation (like Optimism) lets delegate voting power to addresses without transfer. Critical for protocols with many passive holders.

Token Type Use Case Our Stack
ERC-20 utility Payments, rewards, gas Solidity 0.8.x, OpenZeppelin 5.x
ERC-20Permit Gasless approvals EIP-2612, EIP-712
ERC-20Votes On-chain governance Governor, TimelockController
ERC-1155 Multi-token (NFT + fungible) Solidity, OpenZeppelin
Vesting contracts Team/investor lockup LinearVesting, CliffVesting

Token Development Stack

Contracts: Solidity 0.8.x, OpenZeppelin Contracts 5.x (ERC20, ERC20Permit, ERC20Votes, Governor, TimelockController, TokenVesting).
Tokenomics audit: Python models with emission/demand simulation, cadCAD for complex systems modeling.
Deployment and management: Foundry scripts, Gnosis Safe for treasury, OpenZeppelin Defender for automation.
Analytics: Dune Analytics for on-chain metrics, Token Terminal for protocol revenue.

What’s Included in the Work (Deliverables)

  • Tokenomics model with stress tests (bear market, whale exit, governance capture)
  • Contract development with Foundry fuzz tests (gas optimization, reentrancy tests, overflow checks)
  • Audit summary and list of edge cases covered
  • Deployment scripts with Gnosis Safe admin keys
  • Documentation for future upgrades and maintenance
  • 30-day post-launch monitoring support

Process

  1. Tokenomics design — supply model, allocation, emission schedule, vesting. Stress-test scenarios.
  2. Contract development — ERC-20 + extensions, vesting, governance. Foundry fuzz tests on vesting calculations, governance thresholds.
  3. Audit — special attention on governance attack vectors, vesting bypass, permit replay attacks. We use Slither and Echidna for formal verification.
  4. LBP / launch — choose mechanics, set parameters, monitor first 24 hours.
  5. Post-launch — monitor supply distribution via Dune, governance participation metrics, treasury management.

Timelines

  • ERC-20 with permit and basic governance: 2–3 weeks
  • Vesting contract with revocation and cliff: 2–4 weeks
  • Full governance (Governor + Timelock + Token): 4–7 weeks
  • Token + LBP + governance + vesting: 8–14 weeks

We can estimate your project within 24 hours after discussing requirements. Contact us to start the conversation — no obligation, just a technical chat about your token model. Get a detailed proposal tailored to your tokenomics and compliance needs.