Trang chủHướng dẫnNhập môn về ICO Token (Initial Coin Offering)
Blockchain

Nhập môn về ICO Token (Initial Coin Offering)

CyStack blog 3 phút để đọc
CyStack blog10/05/2025
Locker Avatar

Đức Hacker

My passion is hunting down the latest attack trends—ransomware, APTs, you name it—while passing on knowledge to help businesses forge ironclad defenses. I’ve left my mark on data encryption projects and intrusion detection tools now widely used across Vietnam. I’m the shadow that strikes before the enemy does.

Locker logo social
Reading Time: 3 minutes

Khi tôi bắt đầu dấn thân vào blockchain cuối năm 2018, ICO (Initial Coin Offering) đang trên đà bùng nổ mạnh mẽ. Có những dự án kêu gọi vài trăm nghìn đô chỉ trong vài phút, cộng đồng thì thảo luận cực kỳ sôi nổi. Trực tiếp code hợp đồng ICO, tổ chức whitelist, tôi từng chứng kiến những lúc “cháy hàng” và cũng không ít lần đền bù khi soft-cap không đạt. Sau vài năm chinh chiến, tôi sẽ chia sẻ lại quy trình thực tế nhất để tự tay tạo ICO Token – từ lý thuyết đến deployment – đồng thời tránh những “ổ gà” pháp lý, kỹ thuật và marketing qua bài viết này.

ico token

1. ICO Token là gì?

  • ICO (Initial Coin Offering) là hình thức huy động vốn qua việc phát hành token trên blockchain, không phải phát hành “coin” – tức là bạn không tạo ra nền tảng blockchain mới.
  • Token ERC-20 (trên Ethereum) hay token chuẩn tương đương trên các chain khác đại diện quyền lợi, utility hoặc cổ phần trong dự án.

Tôi thấy ICO giống như “crowdsale 2.0” – code smart contract bán token, quản lý whitelist, phân phối token tự động. Ưu điểm lớn nhất là tiếp cận vốn nhanh, toàn cầu; nhược điểm là áp lực compliance và dễ gặp scam nếu không minh bạch.

2. Quy trình 6 bước để tổ chức ICO token

Bước Nội dung Tips
1. Thiết kế Tokenomics – Xác định tổng cung (totalSupply)
– Phân bổ: tam, advisor, community, liquidity
– Vesting và unlock schedule
Chia 10% team vesting 12 tháng, 20% liquidity, 70% bán ICO/airdrop. Giữ vesting để tránh dump giá.
2. Viết Smart Contract ICO – Dựa trên OpenZeppelin ERC20
– Whitelist, pause/unpause, refund soft-cap
– Audit code (tự test + thuê audit)
Audit ít nhất 2 bên: internal và external. Tôi từng “cháy” 5 ETH phí gas vì error fallback—hãy test kỹ!
3. Deploy & Verify – Dùng Hardhat/Truffle + Alchemy/Infura
– Deploy testnet (Goerli/Rinkeby), verify Etherscan
Luôn verify source để tăng độ tin cậy với nhà đầu tư.
4. KYC & Whitelist – Tích hợp KYC (nếu cần)
– Form đăng ký wallet, thu thập address
Dùng Google Forms + Script tự động addWhitelist. Tôi từng lọc được 200 address bot chỉ trong 30 phút.
5. Launch ICO – Mở bán (unpause)
– Monitor gas, lượng ETH đổ vào, feedback
Theo dõi real-time trên Tenderly/BlockScout. Sẵn sàng pause nếu phát hiện bất thường.
6. Hậu ICO & Listing – Rút vốn (nếu soft-cap đạt) hoặc refund
– Listing trên DEX/CEX– Add liquidity
Chuẩn bị sẵn pool Uniswap V2/V3 ngay khi ICO kết thúc để tránh “rug pull” perception.

3. Mẫu Smart Contract ICO (Solidity 0.8.x)

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/security/Pausable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract MyICOToken is ERC20, Pausable, Ownable {
    uint public rate = 1000;           // 1 ETH đổi 1000 token
    uint public softCap = 50 ether;
    uint public hardCap = 200 ether;
    uint public raised;
    mapping(address=>bool) public whitelist;

    constructor() ERC20("MyICOToken","MIT") {
        _mint(address(this), 1_000_000 * 10**decimals());
    }

    modifier onlyWhitelisted() {
        require(whitelist[msg.sender], "Chua duoc whitelist");
        _;
    }

    function buy() external payable onlyWhitelisted whenNotPaused {
        require(raised + msg.value <= hardCap, "Vuot hardCap");
        raised += msg.value;
        uint tokens = msg.value * rate;
        _transfer(address(this), msg.sender, tokens);
    }

    function addWhitelist(address user) external onlyOwner { whitelist[user]=true; }
    function pauseICO() external onlyOwner { _pause(); }
    function unpauseICO() external onlyOwner { _unpause(); }

    function withdraw() external onlyOwner {
        require(raised >= softCap, "Chua dat softCap");
        payable(owner()).transfer(address(this).balance);
    }

    function refund() external whenPaused {
        require(raised < softCap, "Khong the refund");
        uint bal = balanceOf(msg.sender);
        require(bal>0, "Khong co token");
        _transfer(msg.sender,address(this),bal);
        payable(msg.sender).transfer(bal / rate);
    }
}

Xem thêm: Cách viết smart contract trên Polygon

4. Những sai lầm bạn cần lưu ý

Dưới đây là chi tiết các sai lầm thường gặp và cách xử lý, chúng ta cùng điểm qua để không mắc phải nhé:

Sai lầm Dấu hiệu Cách xử lý
Lỗi overflow/underflow Token số lượng lớn bị tính sai Dùng Solidity ^0.8 (tự check overflow)
Bot “cày” whitelist Hàng ngàn address ảo Thêm CAPTCHA / KYC cơ bản
Gas spike lúc launch Tx liên tục fail, user phàn nàn Giảm rate, pause rồi resume theo batch
Không verify contract Nhà đầu tư không tin tưởng Luôn verify lên Etherscan ngay

Có thể bạn quan tâm: Gửi ether từ smart contract tới address

5. Kết luận

Tổ chức một initial coin offering thành công yêu cầu sự kết hợp giữa công nghệ, pháp lý, các chương trình marketing và trust. Chứng kiến nhiều dự án chớm nở, chóng tàn, tôi cho rằng“Code chỉ 30%, phần còn lại là xây dựng cộng đồng và giữ chữ tín.” ICO TokenChỉ khi 4 yếu tố này hòa hợp, dự án ICO mới thực sự bền vững. Nếu bạn đang ấp ủ một initial coin offering, hy vọng thông tin này sẽ có ích cho bạn.

Bài viết liên quan:

0 Bình luận

Đăng nhập để thảo luận

CyStack blog

Mẹo, tin tức, hướng dẫn và các best practice độc quyền của CyStack

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.