דף מכירת טוקנים: רשימת היתרים על-השרשרת ועדכונים חיים

עמוד מכירת טוקנים הוא יותר מסתם עמוד—זוהי אפליקציית web3 מלאה שחייבת לעמוד בעומסי שיא ולהבטיח עסקאות מאובטחות. אנחנו בונים פתרונות כאלה במפתח מלא: מחוזה חכם עם רשימת היתר מבוססת Merkle ועד ממשק בזמן אמת עם אינטגרציה של ארנק קריפטו. הצוות שלנו מטפל בכל המחזור—מביקורת ועד השקה ותמיכה שוטפת—כך שה-IDO שלך פועל בצורה אמינה וללא תקלות.

שירותי פיתוח בלוקצ'יין

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1481
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1336
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1034
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1293
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    738
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1032

דף נחיתה למכירת טוקנים: רשימת היתרים On-Chain ועדכונים בזמן אמת

למה לבחור בדף נחיתה מותאם ל-Web3?

הפתרונות שלנו אינם אתרי שיווק פשוטים; הם יישומי Web3 מלאים. הם מתקשרים עם חוזה מכירת טוקנים, מעבדים תשלומי קריפטו, מנהלים רשימות היתרים, ונשארים אמינים תחת עומס גבוה—לדוגמה, כאשר אלפי משתמשים מצטרפים לפתיחת סבב. טיפלנו ב-50,000 מבקרים בו-זמנית וחסכנו עד $2,000 בגז באמצעות רשימות היתרים של Merkle Tree.

פיתוח חוזה חכם למכירת טוקנים

דף הנחיתה משמש כממשק חזיתי לחוזה. ראשית אנו מתכננים את החוזה באמצעות תבניות OpenZeppelin: Ownable2Step, ReentrancyGuard, Pausable. להלן קטע חוזה לדוגמה המשמש בפרויקטים אמיתיים.

// 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";
import "@openzeppelin/contracts/utils/Pausable.sol";
import "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol";

contract TokenSale is Ownable2Step, NonReentrancyGuard, Pausable {
    using SafeERC20 for IERC20;

    IERC20 public immutable saleToken;
    IERC20 public immutable paymentToken; // USDC
    uint256 public immutable tokenPrice; // USDC per token, 6 decimals
    uint256 public immutable hardCap; // total tokens for sale
    uint256 public immutable minPurchase; // per wallet min
    uint256 public immutable maxPurchase; // per wallet max

    uint256 public saleStart;
    uint256 public saleEnd;
    bytes32 public whitelistMerkleRoot;
    bool public whitelistRequired;

    uint256 public totalSold;
    mapping(address => uint256) public purchased;

    event TokensPurchased(address indexed buyer, uint256 usdcAmount, uint256 tokenAmount);
    event SaleConfigured(uint256 start, uint256 end, bool whitelistRequired);

    constructor(
        address _saleToken,
        address _paymentToken,
        uint256 _tokenPrice,
        uint256 _hardCap,
        uint256 _minPurchase,
        uint256 _maxPurchase,
        address _owner
    ) Ownable2Step() {
        saleToken = IERC20(_saleToken);
        paymentToken = IERC20(_paymentToken);
        tokenPrice = _tokenPrice;
        hardCap = _hardCap;
        minPurchase = _minPurchase;
        maxPurchase = _maxPurchase;
        _transferOwnership(_owner);
    }

    function configureSale(
        uint256 _start,
        uint256 _end,
        bytes32 _merkleRoot,
        bool _whitelistRequired
    ) external onlyOwner {
        saleStart = _start;
        saleEnd = _end;
        whitelistMerkleRoot = _merkleRoot;
        whitelistRequired = _whitelistRequired;
        emit SaleConfigured(_start, _end, _whitelistRequired);
    }

    function buy(
        uint256 usdcAmount,
        bytes32[] calldata merkleProof
    ) external nonReentrant whenNotPaused {
        require(block.timestamp >= saleStart, "Sale not started");
        require(block.timestamp <= saleEnd, "Sale ended");

        if (whitelistRequired) {
            bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
            require(
                MerkleProof.verify(merkleProof, whitelistMerkleRoot, leaf),
                "Not whitelisted"
            );
        }

        uint256 tokenAmount = usdcAmount * 10**18 / tokenPrice;
        require(usdcAmount >= minPurchase, "Below min purchase");
        require(purchased[msg.sender] + tokenAmount <= maxPurchase, "Exceeds max per wallet");
        require(totalSold + tokenAmount <= hardCap, "Hard cap reached");

        purchased[msg.sender] += tokenAmount;
        totalSold += tokenAmount;

        paymentToken.safeTransferFrom(msg.sender, address(this), usdcAmount);
        saleToken.safeTransfer(msg.sender, tokenAmount);

        emit TokensPurchased(msg.sender, usdcAmount, tokenAmount);
    }

    function withdrawFunds(address to) external onlyOwner {
        uint256 balance = paymentToken.balanceOf(address(this));
        paymentToken.safeTransfer(to, balance);
    }

    function withdrawUnsoldTokens(address to) external onlyOwner {
        require(block.timestamp > saleEnd, "Sale not ended");
        uint256 balance = saleToken.balanceOf(address(this));
        saleToken.safeTransfer(to, balance);
    }
}

כיצד רשימת היתרים של Merkle Tree מפחיתה עלויות גז?

אחסון כל כתובות ההיתרים על ה-chain יכול לעלות מעל 0.5 ETH עבור 10,000 כתובות. באמצעות Merkle Tree, אנו מאחסנים רק hash שורש אחד, מה שמפחית את עלות הפריסה ל-~0.02 ETH—חיסכון של $1,500 במחירים נוכחיים. זה זול פי 25.

שיטה עלות פריסה (ETH) חיסכון
אחסון כל הכתובות ~0.5 -
שורש Merkle Tree ~0.02 96%

שילוב ארנק ותהליך תשלום

אנו משתמשים ב-RainbowKit כדי לתמוך ב-MetaMask, WalletConnect, Coinbase Wallet ועוד. משתמשים מאשרים USDC (או ERC-20 אחר) באמצעות עסקה אחת, ולאחר מכן רוכשים טוקנים. אנו גם מיישמים הרשאות EIP-2612 לאישורים ללא גז, מה שמשפר את ההמרה ב-15%.

תהליך אבטחה וביקורת

האבטחה היא מעל הכל. אנו מיישמים:

  • חוזי OpenZeppelin (ReentrancyGuard, Ownable2Step, Pausable)
  • ניתוח סטטי של Slither & Mythril
  • בדיקות fuzzing של Echidna (20,000+ מקרי בדיקה)
  • ביקורת צד שלישי על ידי חברות מובילות

השגנו אפס פרצות קריטיות ב-20 הביקורות האחרונות שלנו.

מה כלול בפיתוח דף מכירת הטוקנים שלנו

  • חוזה חכם מותאם אישית ל-ERC-20 או למכירת טוקנים
  • דף נחיתה חזיתי עם נתונים בזמן אמת
  • הגדרת רשימת היתרים של Merkle tree
  • שילוב ארנק (RainbowKit)
  • עדכונים חיים ב-WebSocket (לדוגמה, תקרת משתמשים, סכום שגויס)
  • סקריפטים לפריסה ותיעוד
  • תמיכה ל-30 יום לאחר ההשקה

מדדי חברה וניסיון

עם למעלה מ-5 שנות ניסיון בפיתוח בלוקצ'יין ו-50+ פרויקטים מוצלחים של מכירת טוקנים, הצוות שלנו מבטיח פתרונות אמינים ומבוקרים. התשתית שלנו שומרת על זמינות של 99.9%, וטיפלנו בפרויקטים שגייסו למעלה מ-$100M בסך הכל.