Memahami Daftar Putih Token
Apa itu Daftar Putih?
Daftar putih membatasi interaksi token atau protokol ke alamat yang disetujui secara eksplisit, sehingga memerlukan pra-otorisasi untuk berpartisipasi.
Konsep Inti:
Daftar Hitam: Semua orang diperbolehkan KECUALI alamat yang dilarang
Daftar Putih: TIDAK ADA YANG diizinkan KECUALI alamat yang disetujui Status Default:
Daftar Hitam: Terbuka (permisif)
Daftar Putih: Tertutup (membatasi)
Mengapa Daftar Putih Itu Penting
1. Penjualan Token & ICO:
- • Verifikasi investor terakreditasi
- • Kepatuhan KYC/AML
- • Batasan geografis
- • Perlindungan anti-bot
- • Mekanik peluncuran yang adil
2. Permen NFT:
- • Hadiah pendukung awal
- • Prioritas anggota komunitas
- • Mencegah pemotongan bot
- • Akses berjenjang
- • Alokasi terjamin
3. Kepatuhan terhadap Peraturan:
- • Kepatuhan terhadap hukum sekuritas
- • Persyaratan investor terakreditasi
- • Batasan geografis
- • Verifikasi investor profesional
4. Protokol DeFi:
- • Akses pengujian beta
- • Manajemen risiko
- • Peluncuran bertahap
- • Fitur premium
- • Pelayanan kelembagaan
5. Keamanan:
- • Batasi permukaan serangan
- • Kontrol kualitas peserta
- • Mengurangi risiko penipuan
- • Aktifkan mekanisme pemulihan
Teknis Implementasi
1. Metode Penyimpanan Dalam Rantai
Pendekatan Paling Sederhana: Memetakan Penyimpanan
Keuntungan:Verifikasi sederhana dan real-time, pembaruan mudah, transparansi on-chain
Kekurangan:Biaya gas tinggi, biaya penyimpanan berskala besar, mahal untuk daftar besar
Terbaik Untuk:Daftar putih kecil (<100 alamat), daftar sering berubah
Penerapan Daftar Putih Dasar:
// Penerapan daftar putih dasar
kontrak Daftar PutihToken {
pemetaan(alamat => bool) masuk daftar putih publik;
alamat admin publik;
hanya pengubah yang Masuk Daftar Putih() {
require(masuk daftar putih[msg.sender], "Tidak masuk daftar putih");
_;
}
pengubah sajaAdmin() {
require(pesan.pengirim == admin, "Bukan admin");
_;
}
konstruktor() {admin = pesan.pengirim;
}
// Tambahkan satu alamat
function addToWhitelist(alamat akun) hanya eksternalAdmin {
masuk daftar putih[akun] = benar;
emit AddedToWhitelist(akun);
}
// Tambahkan beberapa alamat (batch)
fungsi addMultipleToWhitelist(alamat[] akun data panggilan)
eksternal
hanya Admin
{
for (uint i = 0; i < akun.panjang; i++) {
masuk daftar putih[akun[i]] = benar;
emit AddedToWhitelist(accounts[i]);
}
}
// Contoh fungsi yang masuk daftar putih
function mintTokens(uint256 amount) eksternal saja Masuk Daftar Putih {
_mint(pesan.pengirim, jumlah);
}
}
2. Metode Pohon Merkle
Hemat Gas untuk Daftar Besar
Keuntungan:Sangat hemat gas, skalanya mencapai jutaan, penyimpanan root tunggal
Kekurangan:Implementasi yang rumit, komputasi off-chain, kompleksitas UX
Terbaik Untuk:Daftar putih besar (1000+ alamat), jarang diperbarui
Implementasi Pohon Merkle:
impor "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol";kontrak MerkleWhitelist {
bytes32 merkleRoot publik;
pemetaan(alamat => bool) publik telahDiklaim;
alamat admin publik;
konstruktor(bytes32 _merkleRoot) {
merkleRoot = _merkleRoot;
admin = pesan.pengirim;
}
// Perbarui root merkle (daftar putih baru)
fungsi updateMerkleRoot(bytes32 _merkleRoot) eksternal {
require(pesan.pengirim == admin, "Bukan admin");
merkleRoot = _merkleRoot;
}
// Verifikasi keanggotaan daftar putih
fungsi verifikasiDaftar Putih(
bytes32[] bukti data panggilan,
akun alamat
) tampilan publik kembali (bool) {
bytes32 leaf = keccak256(abi.encodePacked(akun));
return MerkleProof.verify(bukti, merkleRoot, daun);
}
// Mint dengan verifikasi daftar putih
fungsi whitelistMint(bytes32[] bukti panggilandata) eksternal {
require(!hasClaimed[msg.sender], "Sudah diklaim");
memerlukan(
verifikasiDaftar Putih(bukti, pesan.pengirim),
"Bukti merkle tidak valid"
);
hasClaimed[pesan.pengirim] = benar;
_mint(pesan.pengirim, 1);
}
}
Menghasilkan Pohon Merkle (Off-Chain):
const { MerkleTree } = memerlukan('merkletreejs');
const keccak256 = require('keccak256');// Daftar putih alamat
daftar putih const = [
'0x1234...',
'0x5678...',
'0x9abc...',
// ... ribuan lainnya
];// Membuat simpul daun
const leafNodes = daftar putih.peta(addr =>
keccak256(addr)
);// Buat Pohon Merkle
const merkleTree = MerkleTree baru(leafNodes, keccak256, {
sortPairs: benar
});// Dapatkan root (simpan dalam kontrak)
const rootHash = merkleTree.getRoot();// Hasilkan bukti untuk alamat tertentu
fungsi getProof(alamat) {
const leaf = keccak256(alamat);
bukti const = merkleTree.getHexProof(leaf);
bukti pengembalian;
}
3. Metode Tanda Tangan Digital
Otorisasi Off-Chain
Keuntungan:Tidak ada penyimpanan on-chain, persetujuan dinamis, logika fleksibel, menjaga privasi
Kekurangan:Penanda tangan terpusat, diperlukan backend, risiko kompromi tanda tangan
Terbaik Untuk:Daftar putih dinamis, verifikasi kompleks, persyaratan privasi
Pelaksanaan Verifikasi Tanda Tangan:
kontrak Tanda TanganDaftar Putih {
alamat penandatangan publik;
pemetaan(alamat => bool) hasMinted publik;
konstruktor(alamat _penandatangan) {
penandatangan = _penandatangan;
}
// Verifikasi tanda tangan dari penandatangan resmi
fungsi verifikasiTanda Tangan(
alamat akun,
tanda tangan memori byte
) tampilan publik kembali (bool) {
bytes32 messageHash = keccak256(abi.encodePacked(akun));
bytes32 ethSignedMessageHash = getEthSignedMessageHash(messageHash);
return recoverySigner(ethSignedMessageHash, tanda tangan) == penanda tangan;
}
fungsi getEthSignedMessageHash(bytes32 messageHash)
batin
murni
kembali (byte32)
{
kembali keccak256(
abi.encodePacked("\x19Pesan yang Ditandatangani Ethereum:\n32", messageHash)
);
}
fungsi memulihkan Penandatangan(
bytes32 ethSignedMessageHash,
tanda tangan memori byte
) pengembalian murni internal (alamat) {
(bytes32 r, bytes32 s, uint8 v) = splitSignature(tanda tangan);
kembalikan ecrecover(ethSignedMessageHash, v, r, s);
}
fungsi splitSignature (tanda memori byte)
batin
murni
pengembalian (bytes32 r, bytes32 s, uint8 v)
{
require(sig.length == 65, "Panjang tanda tangan tidak valid");
perakitan {
r := mload(tambahkan(sig, 32))
s := mload(tambahkan(sig, 64))
v := byte(0, mload(tambahkan(sig, 96)))
}
}
// Mint dengan verifikasi tanda tangan
fungsi tanda tanganMint(tanda tangan memori byte) eksternal {
require(!hasMinted[msg.sender], "Sudah dicetak");
memerlukan(
verifikasiTanda Tangan(pesan.pengirim, tanda tangan),
"Tanda tangan tidak valid"
);
hasMinted[pesan.pengirim] = benar;
_mint(pesan.pengirim, 1);
}
}
4. Gerbang NFT/Token
Daftar Putih Berbasis Kepemilikan
Keuntungan:Verifikasi otomatis, pembangunan komunitas, nilai pasar sekunder
Kekurangan:Akses yang dapat dialihkan, manipulasi pasar, ketergantungan eksternal
Terbaik Untuk:Hadiah komunitas, akses DAO, manfaat berjenjang
Implementasi Gerbang NFT:
antarmuka IERC721 {
fungsi balanceOf(pemilik alamat) tampilan eksternal kembali (uint256);
}kontrak Daftar Putih NFTGated {
IERC721 publik memerlukan NFT;
konstruktor(alamat _nftAddress) {
diperlukanNFT = IERC721(_nftAddress);
}
pengubah sajaNFTHholder() {
memerlukan(
diperlukanNFT.balanceOf(msg.sender) > 0,
"Harus memiliki NFT yang diperlukan"
);
_;
}
// Akses dibatasi untuk pemegang NFT
fungsi hak istimewaMint() hanya eksternalNFTHolder {
_mint(pesan.pengirim, 1);
}
}
Kasus Penggunaan di Dunia Nyata
Daftar Putih ICO/IDO
Alur Proses:
Tahap Aplikasi (1-2 minggu): Aplikasi pengguna, verifikasi KYC/AML, pemeriksaan investor terakreditasi, penyaringan geografis
Fase Seleksi: Meninjau lamaran, siapa cepat dia dapat, ATAU berdasarkan lotere ATAU berdasarkan kriteria
Publikasi Daftar Putih: Hasilkan akar Merkle, terapkan kontrak, umumkan ke komunitas
Fase Penjualan: Alamat yang masuk daftar putih berpartisipasi, alamat yang tidak masuk daftar putih diblokir, akses terbatas waktu
Fase Publik (opsional): Terbuka untuk semua orang setelah periode daftar putih, sisa alokasi
Daftar Putih NFT Mint
Akses Berjenjang:
Tingkat 1 - VIP (24 jam lebih awal):Tim inti, moderator Discord, pendukung awal, kontributor khusus
Tingkat 2 - Daftar Putih (12 jam lebih awal):Anggota komunitas aktif, keterlibatan media sosial, pemenang kompetisi, proyek mitra
Tingkat 3 - Daftar yang diizinkan (6 jam lebih awal):Pengguna terdaftar, verifikasi dasar, pelanggan email
Tingkat 4 - Publik:Siapapun, yang datang lebih dulu dilayani, biasanya bahan bakarnya lebih tinggi
Implementasi NFT Mint Berjenjang:
kontrak BerjenjangNFTMint {
bytes32 vipMerkleRoot publik;
bytes32 daftar putih publikMerkleRoot;
bytes32 daftar izin publikMerkleRoot;
uint256 public vipStartTime = 1700000000;
uint256 public whitelistStartTime = vipStartTime + 24 jam;
uint256 publicallowlistStartTime = whitelistStartTime + 12 jam;
uint256 public publicStartTime = AllowlistStartTime + 6 jam;
pemetaan(alamat => uint256) public mintedAmount;
uint256 publik maxPerWallet = 3;
fungsi vipMint(jumlah uint256, bytes32[] bukti panggilan data) eksternal {
require(block.timestamp >= vipStartTime, "Terlalu dini");
memerlukan(
verifikasiMerkleProof(bukti, vipMerkleRoot, pesan.pengirim),
"Bukan VIP"
);
membutuhkan(mintedAmount[msg.sender] + jumlah <= maxPerWallet);
mintedAmount[pesan.pengirim] += jumlah;
_mint(pesan.pengirim, jumlah);
}
function whitelistMint(jumlah uint256, bytes32[] bukti panggilan data) eksternal {
require(block.timestamp >= whitelistStartTime, "Terlalu dini");
memerlukan(
verifikasiMerkleProof(bukti, daftar putihMerkleRoot, pesan.pengirim),
"Tidak masuk daftar putih"
);
membutuhkan(mintedAmount[msg.sender] + jumlah <= maxPerWallet);
mintedAmount[pesan.pengirim] += jumlah;
_mint(pesan.pengirim, jumlah);
}
fungsi publicMint(jumlah uint256) hutang eksternal {
require(block.timestamp >= publicStartTime, "Terlalu dini");
require(pesan.nilai >= jumlah * PUBLIC_PRICE);
membutuhkan(mintedAmount[msg.sender] + jumlah <= maxPerWallet);
mintedAmount[pesan.pengirim] += jumlah;
_mint(pesan.pengirim, jumlah);
}
}
Kepatuhan terhadap Peraturan
Penawaran Token Keamanan (STO):
Persyaratan Kepatuhan:
- • Verifikasi investor terakreditasi ($1M+ kekayaan bersih atau $200K+ pendapatan)
- • Batasan geografis (Reg S, Reg D)
- • Periode penguncian
- • Pembatasan transfer
- • Jalur audit
Akses Protokol DeFi
Pengujian Beta:
Kasus Penggunaan:Peluncuran bertahap, pembatasan risiko, program bug bounty, fitur premium, layanan institusional
Praktik Terbaik
Untuk Proyek
1. Komunikasi yang Jelas:
Informasi Penting: Kriteria daftar putih, proses aplikasi, metode seleksi, jangka waktu, batas alokasi, persyaratan teknis
2. Seleksi Adil:
Kriteria transparan, tindakan anti-sybil, pendekatan yang mengutamakan komunitas, undian untuk kelebihan permintaan, proses banding
3. Keamanan:
Kontrak audit, kunci admin aman, uji di testnet, verifikasi pohon merekle, pembatasan tarif, perlindungan terdepan
4. Pengalaman Pengguna:
Proses verifikasi sederhana, instruksi jelas, saluran dukungan, alat pembuatan bukti, antarmuka pemeriksaan status
5. Kepatuhan Hukum:
KYC/AML jika diperlukan, kepatuhan hukum sekuritas, batasan geografis, persyaratan layanan, tinjauan hukum
Untuk Pengguna
Tip Verifikasi:
- • Ikuti saluran resmi saja
- • Selesaikan KYC dengan jujur
- • Memenuhi tenggat waktu
- • Memberikan informasi yang akurat
- • Simpan bukti permohonan
- • Verifikasi alamat kontrak
Keamanan:
- • Jangan pernah membagikan kunci pribadi
- • Verifikasi URL situs web
- • Periksa alamat kontrak
- • Waspada terhadap phising
- • Gunakan dompet perangkat keras
- • Tes dengan jumlah kecil
Kesalahan Umum:
- • ❌ Batas waktu pendaftaran tidak ada
- • ❌ KYC tidak lengkap
- • ❌ Alamat dompet salah
- • ❌ Tidak memenuhi kriteria
- • ❌ Terjerat penipuan
- • ❌ Menggunakan alamat pertukaran
Perbandingan: Metode
| Metode | Biaya Gas | Skalabilitas | Fleksibilitas | Keamanan | Terbaik Untuk |
|---|---|---|---|---|---|
| Pemetaan | Tinggi | Buruk | Luar Biasa | Bagus | Daftar kecil |
| Pohon Merkle | Rendah | Luar Biasa | Buruk | Bagus | Daftar besar |
| Tanda tangan | Rendah | Luar Biasa | Luar Biasa | Sedang | Daftar dinamis |
| NFT/Token | Rendah | Luar Biasa | Bagus | Bagus | Gerbang komunitas |
Tren Masa Depan
1. Integrasi Identitas Terdesentralisasi
Daftar putih Berdaulat Sendiri dengan kredensial portabel, verifikasi menjaga privasi, daftar putih lintas platform
2. Seleksi Bertenaga AI
Kurasi otomatis dengan analisis perilaku, penilaian kontribusi, deteksi sybil, distribusi adil
3. Daftar Putih Lintas Protokol
Akses yang dapat dioperasikan dengan satu daftar putih untuk berbagai penggunaan, portabilitas reputasi, kemitraan ekosistem
4. Teknologi Regulasi
Otomatisasi kepatuhan dengan pemeriksaan yurisdiksi real-time, daftar putih dinamis, pelaporan peraturan
Kesimpulan
Daftar putih token memberikan kontrol akses penting untuk proyek mata uang kripto, memungkinkan kepatuhan terhadap peraturan, distribusi yang adil, pembangunan komunitas, dan keamanan. Dari penyimpanan pemetaan sederhana hingga pohon Merkle yang canggih dan verifikasi tanda tangan, pilihan penerapan bergantung pada skala, kebutuhan fleksibilitas, dan pertimbangan gas.
Poin Penting:
- • Pilih metode yang tepat: Pemetaan untuk daftar kecil/dinamis, Merkle untuk daftar besar/statis, tanda tangan untuk fleksibilitas
- • Keseimbangan akses dan keadilan: Kriteria yang jelas, seleksi yang transparan, pendekatan yang mengutamakan masyarakat
- • Prioritaskan keamanan: Audit kontrak, mengamankan kunci admin, melindungi data pengguna
- • Optimalkan UX: Proses sederhana, instruksi jelas, alat bermanfaat
- • Tetap patuh: Ikuti peraturan, terapkan KYC bila diperlukan, dokumentasikan semuanya
Seiring berkembangnya mata uang kripto, daftar putih akan menjadi lebih canggih, otomatis, dan menjaga privasi. Proyek yang menerapkan whitelisting dengan bijaksana – menyeimbangkan kontrol akses dengan keadilan, keamanan dengan kegunaan, dan kepatuhan terhadap desentralisasi – akan membangun komunitas yang lebih kuat dan peluncuran token yang lebih sukses.
Pertanyaan yang Sering Diajukan
T: Mengapa proyek menggunakan daftar putih dan bukan penjualan terbuka?
A: Daftar putih memungkinkan: (1) Kepatuhan terhadap peraturan (investor terakreditasi, pembatasan geografis), (2) Pencegahan bot, (3) Distribusi yang adil kepada komunitas, (4) Peluncuran terkendali untuk keamanan.
T: Bagaimana cara saya masuk daftar putih untuk pembuatan NFT?
A: Biasanya: (1) Bergabung dengan proyek Discord/media sosial, (2) Terlibat dengan komunitas, (3) Ikuti instruksi aplikasi, (4) Selesaikan verifikasi (KYC jika diperlukan), (5) Kirim alamat dompet, (6) Tunggu konfirmasi. Setiap proyek berbeda.
T: Apakah daftar putih dapat diubah setelah penerapan?
A : Tergantung implementasinya. Penyimpanan pemetaan: ya (jika kontrol admin disertakan). Pohon Merkle: memerlukan pembaruan hash root. Tanda tangan: ya (dikontrol backend). NFT-gating: otomatis berdasarkan kepemilikan.
T: Apakah tempat yang masuk daftar putih dapat dialihkan?
A: Biasanya tidak ada daftar putih berbasis alamat (terkait dengan dompet tertentu). Pengecualian: Akses NFT/token-gated dapat dialihkan dengan kepemilikan NFT/token.
T: Berapa perbedaan biaya bahan bakar antara metode daftar putih?
A: Pemetaan: 20.000+ gas per penambahan alamat. Merkle: ~3.000-5.000 gas untuk verifikasi (konstan terlepas dari ukuran daftar putihnya). Tanda tangan: ~3,000-5,000 gas untuk verifikasi. Penghematan bahan bakar meningkat secara dramatis seiring dengan besarnya daftar.