Cara Verifikasi Token BEP-20 di BscScan

buat token crypto mudah menggunakan token generator

📋 Cara Verifikasi Token BEP-20 di BscScan

Setelah berhasil membuat token melalui platform Token Generator Kami, langkah selanjutnya adalah memverifikasi source code token Anda di BscScan namun sebenarnya ketika Anda buat token melalui Crypto RECEH Token Generator itu sudah otomatis terverifikasi di explorer, ini apabila Anda ingin coba verifikasi manual untuk kondisi bilamana source code contract tidak otomatis terverifikasi saja. Verifikasi penting agar token Anda terpercaya dan bisa muncul dengan nama & simbol yang benar di wallet.

📌 Informasi Penting Token Anda

Parameter Keterangan
Nama Token [nama token Anda]
Simbol Token [simbol token Anda]
Desimal [desimal token Anda, biasanya 18]
Total Supply [jumlah token yang Anda buat]
Alamat Token [copy dari popup success]
Alamat Wallet Anda [alamat wallet yang terhubung]

📝 Langkah-Langkah Verifikasi

🔹 Langkah 1: Buka BscScan

Kunjungi BscScan.com dan masukkan alamat token Anda di kolom pencarian (bagian atas).


🔹 Langkah 2: Masuk ke Tab Contract

Setelah masuk ke halaman token, klik tab “Contract” lalu klik tombol “Verify and Publish” yang berwarna biru.


🔹 Langkah 3: Isi Form Verifikasi – Bagian 1

  1. Contract Name: Token
  2. Compiler Type: Solidity (Single file)
  3. Compiler Version: v0.8.27 ⚠️ INI PENTING: v0.8.27 BUKAN yang lain!
  4. License Type: MIT License (MIT)

🔹 Langkah 4: Optimization

Pilih Yes untuk Optimization (isi runs 200).

📄 Source Code untuk Verifikasi

Copy seluruh kode di bawah ini dan paste ke kolom “Enter the Solidity Contract Code below”:

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

interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

interface IERC20Errors {
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
    error ERC20InvalidSender(address sender);
    error ERC20InvalidReceiver(address receiver);
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);
    error ERC20InvalidApprover(address approver);
    error ERC20InvalidSpender(address spender);
}

abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;
    mapping(address account => mapping(address spender => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual returns (string memory) {
        return _name;
    }

    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual returns (uint256) {
        return _balances[account];
    }

    function transfer(address to, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, value);
        return true;
    }

    function allowance(address owner, address spender) public view virtual returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, value);
        return true;
    }

    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) revert ERC20InvalidSender(address(0));
        if (to == address(0)) revert ERC20InvalidReceiver(address(0));
        _update(from, to, value);
    }

    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) revert ERC20InsufficientBalance(from, fromBalance, value);
            unchecked { _balances[from] = fromBalance - value; }
        }

        if (to == address(0)) {
            unchecked { _totalSupply -= value; }
        } else {
            unchecked { _balances[to] += value; }
        }

        emit Transfer(from, to, value);
    }

    function _mint(address account, uint256 value) internal {
        if (account == address(0)) revert ERC20InvalidReceiver(address(0));
        _update(address(0), account, value);
    }

    function _burn(address account, uint256 value) internal {
        if (account == address(0)) revert ERC20InvalidSender(address(0));
        _update(account, address(0), value);
    }

    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) revert ERC20InvalidApprover(address(0));
        if (spender == address(0)) revert ERC20InvalidSpender(address(0));
        _allowances[owner][spender] = value;
        if (emitEvent) emit Approval(owner, spender, value);
    }

    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance < type(uint256).max) {
            if (currentAllowance < value) revert ERC20InsufficientAllowance(spender, currentAllowance, value);
            unchecked { _approve(owner, spender, currentAllowance - value, false); }
        }
    }
}

abstract contract Ownable is Context {
    address private _owner;
    error OwnableUnauthorizedAccount(address account);
    error OwnableInvalidOwner(address owner);
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor(address initialOwner) {
        if (initialOwner == address(0)) revert OwnableInvalidOwner(address(0));
        _transferOwnership(initialOwner);
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) revert OwnableUnauthorizedAccount(_msgSender());
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) revert OwnableInvalidOwner(address(0));
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract Token is ERC20, Ownable {
    uint8 private _customDecimals;

    constructor(
        string memory name_,
        string memory symbol_,
        uint8 decimals_,
        uint256 initialSupply,
        address creator
    ) ERC20(name_, symbol_) Ownable(creator) {
        _customDecimals = decimals_;
        _mint(creator, initialSupply);
    }

    function decimals() public view virtual override returns (uint8) {
        return _customDecimals;
    }
}

⚙️ Constructor Arguments

Di bagian "Constructor Arguments", masukkan parameter token Anda (dalam format ABI-encoded atau manual):

Parameter Tipe Data Contoh Value
name_ string "My Token"
symbol_ string "MTK"
decimals_ uint8 18
initialSupply uint256 1000000000000000000000000
creator address 0x1234...5678

🧮 Cara Hitung initialSupply

Rumus: initialSupply = totalSupply × 10decimals

Contoh:
Total Supply = 1.000.000 token
Decimals = 18
Maka initialSupply = 1.000.000 × 1018 = 1.000.000.000.000.000.000.000.000

✅ Langkah Terakhir

Klik tombol "Verify and Publish" dan tunggu beberapa saat.

Jika berhasil, akan muncul pesan "Successfully verified the contract" dan tanda centang hijau di halaman contract token Anda ✅

⚠️ Troubleshooting (Jika Gagal)

  • ❌ "Invalid constructor arguments" → Pastikan format arguments benar. String harus dalam tanda kutip, numbers tanpa kutip.
  • ❌ "Compiler version mismatch" → Pastikan memilih compiler version v0.8.27, bukan v0.8.27+commit.... atau yang lain.
  • ❌ "Source code verification failed" → Coba pastikan tidak ada spasi extra di awal/akhir code.

💬 Butuh Bantuan?

Jika mengalami kesulitan, hubungi support kami via WhatsApp:


© 2026 CryptoRECEH.com - Panduan Verifikasi Token BEP-20 di BscScan.

Scroll to Top