Token-Whitelisting verstehen
Was ist Whitelisting?
Whitelisting beschränkt Token- oder Protokollinteraktionen auf explizit genehmigte Adressen und erfordert eine Vorautorisierung für die Teilnahme.
Kernkonzept:
Blacklisting: Jeder erlaubt, AUSSER verbotene Adressen
Whitelisting: NIEMAND erlaubt, AUSSER genehmigte Adressen. Standardzustände:
Blacklist: Offen (freizügig)
Whitelist: Geschlossen (restriktiv)
Warum Whitelisting wichtig ist
1. Token-Verkäufe & ICOs:
- • Akkreditierte Anlegerverifizierung
- • KYC/AML-Konformität
- • Geografische Beschränkungen
- • Anti-Bot-Schutz
- • Faire Startmechanik
2. NFT-Mints:
- • Belohnungen für frühe Unterstützer
- • Community-Mitgliedspriorität
- • Bot-Snipping verhindern
- • Abgestufter Zugriff
- • Garantierte Zuteilung
3. Einhaltung gesetzlicher Vorschriften:
- • Einhaltung der Wertpapiergesetze
- • Anforderungen an akkreditierte Anleger
- • Geografische Beschränkungen
- • Professionelle Anlegerverifizierung
4. DeFi-Protokolle:
- • Betatest-Zugriff
- • Risikomanagement
- • Schrittweise Einführung
- • Premium-Funktionen
- • Institutionelle Dienstleistungen
5. Sicherheit:
- • Angriffsfläche begrenzen
- • Teilnehmerqualität kontrollieren
- • Reduzieren Sie das Betrugsrisiko
- • Wiederherstellungsmechanismen aktivieren
Technische Umsetzung
1. On-Chain-Speichermethode
Einfachster Ansatz: Speicher zuordnen
Vorteile:Einfache Verifizierung in Echtzeit, einfache Aktualisierungen, On-Chain-Transparenz
Nachteile:Hohe Gaskosten, Lagerkosten skaliert, teuer für große Listen
Geeignet für:Kleine Whitelists (<100 Adressen), häufig wechselnde Listen
Grundlegende Whitelist-Implementierung:
// Grundlegende Whitelist-Implementierung
Vertrag WhitelistToken {
Mapping(address => bool) öffentlich auf die Whitelist gesetzt;
Adresse öffentliche Verwaltung;
Modifikator onlyWhitelisted() {
require(whitelisted[msg.sender], „Nicht auf der Whitelist“);
_;
}
Modifikator onlyAdmin() {
require(msg.sender == admin, „Nicht admin“);
_;
}
Konstruktor() {admin = msg.sender;
}
// Einzelne Adresse hinzufügen
Funktion addToWhitelist(Adresskonto) external onlyAdmin {
whitelisted[Konto] = true;
emit AddedToWhitelist(account);
}
// Mehrere Adressen hinzufügen (Batch)
Funktion addMultipleToWhitelist(Adresse[] Anrufdatenkonten)
extern
onlyAdmin
{
for (uint i = 0; i < Accounts.Length; i++) {
whitelisted[accounts[i]] = true;
emit AddedToWhitelist(accounts[i]);
}
}
// Beispiel für eine Funktion auf der Whitelist
Funktion mintTokens(uint256 amount) external onlyWhitelisted {
_mint(msg.sender, Betrag);
}
}
2. Merkle Tree-Methode
Gaseffizient für große Listen
Vorteile:Extrem gaseffizient, skalierbar auf Millionen, Single-Root-Speicher
Nachteile:Komplexe Implementierung, Off-Chain-Berechnung, UX-Komplexität
Geeignet für:Große Whitelists (über 1000 Adressen), seltene Aktualisierungen
Merkle Tree-Implementierung:
import "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol";contract MerkleWhitelist {
bytes32 public merkleRoot;
Mapping(address => bool) public hasClaimed;
Adresse öffentliche Verwaltung;
Konstruktor(bytes32 _merkleRoot) {
merkleRoot = _merkleRoot;
admin = msg.sender;
}
// Merkle Root aktualisieren (neue Whitelist)
Funktion updateMerkleRoot(bytes32 _merkleRoot) external {
require(msg.sender == admin, „Nicht admin“);
merkleRoot = _merkleRoot;
}
// Mitgliedschaft auf der Whitelist überprüfen
Funktion verifyWhitelist(
bytes32[] Anrufdatennachweis,
Adresskonto
) public view gibt zurück (bool) {
bytes32 leaf = keccak256(abi.encodePacked(account));
return MerkleProof.verify(proof, merkleRoot, leaf);
}
// Mint mit Whitelist-Verifizierung
Funktion WhitelistMint(Bytes32[] CallData Proof) External {
require(!hasClaimed[msg.sender], „Bereits beansprucht“);
erfordern(
verifyWhitelist(proof, msg.sender),
„Ungültiger Merkle-Beweis“
);
hasClaimed[msg.sender] = true;
_mint(msg.sender, 1);
}
}
Merkle Tree generieren (Off-Chain):
const { MerkleTree } = require('merkletreejs');
const keccak256 = require('keccak256');// Whitelist-Adressen
const Whitelist = [
'0x1234...',
'0x5678...',
'0x9abc...',
// ... Tausende mehr
];// Blattknoten erstellen
const leafNodes = whitelist.map(addr =>
keccak256(addr)
);// Merkle-Baum erstellen
const merkleTree = new MerkleTree(leafNodes, keccak256, {
sortPairs: wahr
});// Root abrufen (im Vertrag speichern)
const rootHash = merkleTree.getRoot();// Beweis für bestimmte Adresse generieren
Funktion getProof(adresse) {
const leaf = keccak256(address);
const Proof = merkleTree.getHexProof(leaf);
Rücksendenachweis;
}
3. Digitale Signaturmethode
Off-Chain-Autorisierung
Vorteile:Keine Speicherung in der Kette, dynamische Genehmigung, flexible Logik, Wahrung der Privatsphäre
Nachteile:Zentralisierter Unterzeichner, Backend erforderlich, Risiko einer Signaturkompromittierung
Geeignet für:Dynamische Whitelists, komplexe Überprüfung, Datenschutzanforderungen
Implementierung der Signaturüberprüfung:
Vertrag SignatureWhitelist {
Adresse des öffentlichen Unterzeichners;
Mapping(address => bool) public hasMinted;
Konstruktor(Adresse _signer) {
Unterzeichner = _signer;
}
// Signatur des autorisierten Unterzeichners überprüfen
Funktion verifySignature(
Adresskonto,
Bytes Speichersignatur
) public view gibt zurück (bool) {
bytes32 messageHash = keccak256(abi.encodePacked(account));
bytes32 ethSignedMessageHash = getEthSignedMessageHash(messageHash);
return restartSigner(ethSignedMessageHash, Signatur) == signer;
}
Funktion getEthSignedMessageHash(bytes32 messageHash)
intern
rein
gibt zurück (bytes32)
{
Rückkehr keccak256(
abi.encodePacked("\x19Ethereum Signed Message:\n32", messageHash)
);
}
Funktion „recoverSigner(“
bytes32 ethSignedMessageHash,
Bytes Speichersignatur
) interne reine Rückgabe (Adresse) {
(bytes32 r, bytes32 s, uint8 v) = splitSignature(signature);
return ecrecover(ethSignedMessageHash, v, r, s);
}
Funktion splitSignature(Bytes Speichersignatur)
intern
rein
gibt zurück (bytes32 r, bytes32 s, uint8 v)
{
require(sig.length == 65, „Ungültige Signaturlänge“);
Versammlung {
r := mload(add(sig, 32))
s := mload(add(sig, 64))
v := byte(0, mload(add(sig, 96)))
}
}
// Neuwertig mit Signaturprüfung
Funktion SignaturMint(Bytes Speichersignatur) external {
require(!hasMinted[msg.sender], "Bereits geprägt");
erfordern(
verifySignature(msg.sender, Signatur),
„Ungültige Signatur“
);
hasMinted[msg.sender] = true;
_mint(msg.sender, 1);
}
}
4. NFT/Token-Gating
Eigentumsbasiertes Whitelisting
Vorteile:Automatisierte Verifizierung, Community-Aufbau, Sekundärmarktwert
Nachteile:Übertragbarer Zugang, Marktmanipulation, externe Abhängigkeit
Geeignet für:Community-Belohnungen, DAO-Zugang, abgestufte Vorteile
NFT-Gating-Implementierung:
Schnittstelle IERC721 {
Funktion balanceOf(Adresseigentümer) externe Ansicht gibt (uint256) zurück;
}Vertrag NFTGatedWhitelist {
IERC721 öffentlich erforderlichNFT;
Konstruktor(Adresse _nftAddress) {
erforderlichNFT = IERC721(_nftAddress);
}
Modifikator onlyNFTHolder() {
erfordern(
erforderlichNFT.balanceOf(msg.sender) > 0,
„Erforderliches NFT muss vorhanden sein“
);
_;
}
// Zugriff auf NFT-Inhaber beschränkt
Funktion PrivilegedMint() external onlyNFTHolder {
_mint(msg.sender, 1);
}
}
Reale Anwendungsfälle
ICO/IDO-Whitelisting
Prozessablauf:
Bewerbungsphase (1-2 Wochen): Benutzerantrag, KYC/AML-Verifizierung, akkreditierter Anlegercheck, geografisches Screening
Auswahlphase: Bewerbungen prüfen, „Wer zuerst kommt, mahlt zuerst“ ODER Lotterie ODER kriterienbasiert
Whitelist-Veröffentlichung: Merkle-Root generieren, Vertrag bereitstellen, der Community bekannt geben
Verkaufsphase: Auf der Whitelist stehende Adressen nehmen teil, nicht auf der Whitelist stehende Adressen werden gesperrt, zeitlich begrenzter Zugriff
Öffentliche Phase (optional): Offen für alle nach Whitelist-Zeitraum, verbleibende Zuteilung
NFT Mint Whitelisting
Abgestufter Zugriff:
Stufe 1 – VIP (24 Stunden früher):Kernteam, Discord-Moderatoren, frühe Unterstützer, besondere Mitwirkende
Stufe 2 – Whitelist (12 Stunden früher):Aktive Community-Mitglieder, Social-Media-Engagement, Wettbewerbssieger, Partnerprojekte
Stufe 3 – Zulassungsliste (6 Stunden früher):Registrierte Benutzer, Basisverifizierung, E-Mail-Abonnenten
Tier 4 – Öffentlich:Jeder, wer zuerst kommt, mahlt zuerst, normalerweise höheres Benzin
Abgestufte NFT-Mint-Implementierung:
Vertrag TieredNFTMint {
bytes32 public vipMerkleRoot;
bytes32 öffentliche WhitelistMerkleRoot;
bytes32 öffentliche ZulassungslisteMerkleRoot;
uint256 public vipStartTime = 1700000000;
uint256 public whitelistStartTime = vipStartTime + 24 Stunden;
uint256 publicallowlistStartTime = whitelistStartTime + 12 Stunden;
uint256 public publicStartTime =allowlistStartTime + 6 Stunden;
Mapping(address => uint256) public mintedAmount;
uint256 public maxPerWallet = 3;
Funktion vipMint(uint256 Menge, Bytes32[] Aufrufdatennachweis) external {
require(block.timestamp >= vipStartTime, "Zu früh");
erfordern(
verifyMerkleProof(proof, vipMerkleRoot, msg.sender),
„Kein VIP“
);
require(mintedAmount[msg.sender] + Betrag <= maxPerWallet);
mintedAmount[msg.sender] += Betrag;
_mint(msg.sender, Betrag);
}
Funktion WhitelistMint(uint256 Menge, Bytes32[] Aufrufdatennachweis) external {
require(block.timestamp >= whitelistStartTime, "Zu früh");
erfordern(
verifyMerkleProof(proof, whitelistMerkleRoot, msg.sender),
„Nicht auf der Whitelist“
);
require(mintedAmount[msg.sender] + Betrag <= maxPerWallet);
mintedAmount[msg.sender] += Betrag;
_mint(msg.sender, Betrag);
}
Funktion publicMint(uint256 Betrag) extern zahlbar {
require(block.timestamp >= publicStartTime, "Zu früh");
require(msg.value >= Betrag * PUBLIC_PRICE);
require(mintedAmount[msg.sender] + Betrag <= maxPerWallet);
mintedAmount[msg.sender] += Betrag;
_mint(msg.sender, Betrag);
}
}
Einhaltung gesetzlicher Vorschriften
Security Token Offerings (STOs):
Compliance-Anforderungen:
- • Akkreditierte Anlegerverifizierung (Nettowert über 1 Mio. USD oder Einkommen über 200.000 USD)
- • Geografische Beschränkungen (Reg S, Reg D)
- • Sperrfristen
- • Übertragungsbeschränkungen
- • Prüfprotokolle
DeFi-Protokollzugriff
Betatest:
Anwendungsfälle:Schrittweise Einführung, Risikobegrenzung, Bug-Bounty-Programme, Premium-Funktionen, institutionelle Dienste
Best Practices
Für Projekte
1. Klare Kommunikation:
Wesentliche Informationen: Whitelist-Kriterien, Bewerbungsprozess, Auswahlmethode, Zeitplan, Zuteilungsgrenzen, technische Anforderungen
2. Faire Auswahl:
Transparente Kriterien, Anti-Sybil-Maßnahmen, Community-First-Ansatz, Lotterie für Übernachfrage, Berufungsverfahren
3. Sicherheit:
Prüfverträge, sichere Admin-Schlüssel, Tests im Testnetz, Überprüfung von Merkle-Bäumen, Ratenbegrenzung, Front-Running-Schutz
4. Benutzererfahrung:
Einfacher Verifizierungsprozess, klare Anweisungen, Supportkanäle, Tools zur Beweiserstellung, Schnittstelle zur Statusprüfung
5. Rechtskonformität:
KYC/AML, falls erforderlich, Einhaltung der Wertpapiergesetze, geografische Beschränkungen, Nutzungsbedingungen, rechtliche Überprüfung
Für Benutzer
Verifizierungstipps:
- • Folgen Sie nur offiziellen Kanälen
- • KYC ehrlich abschließen
- • Fristen einhalten
- • Geben Sie genaue Informationen an
- • Bewahren Sie den Antragsnachweis auf
- • Vertragsadressen überprüfen
Sicherheit:
- • Geben Sie niemals private Schlüssel weiter
- • Website-URLs überprüfen
- • Vertragsadressen prüfen
- • Vorsicht vor Phishing
- • Hardware-Wallets verwenden
- • Test mit kleinen Beträgen
Häufige Fehler:
- • ❌ Versäumte Bewerbungsfrist
- • ❌ Unvollständiger KYC
- • ❌ Falsche Wallet-Adresse
- • ❌ Kriterien nicht erfüllen
- • ❌ Auf Betrug hereinfallen
- • ❌ Verwendung von Austauschadressen
Vergleich: Methoden
| Methode | Gaskosten | Skalierbarkeit | Flexibilität | Sicherheit | Am besten geeignet für |
|---|---|---|---|---|---|
| Zuordnung | Hoch | Schlecht | Ausgezeichnet | Gut | Kleine Listen |
| Merkle Tree | Niedrig | Ausgezeichnet | Schlecht | Gut | Große Listen |
| Signatur | Niedrig | Ausgezeichnet | Ausgezeichnet | Mittel | Dynamische Listen |
| NFT/Token | Niedrig | Ausgezeichnet | Gut | Gut | Community-Gating |
Zukünftige Trends
1. Dezentrale Identitätsintegration
Selbstsouveränes Whitelisting mit tragbaren Anmeldeinformationen, datenschutzwahrende Überprüfung, plattformübergreifende Whitelists
2. KI-gestützte Auswahl
Automatisierte Kuration mit Verhaltensanalyse, Beitragsbewertung, Sybil-Erkennung, gerechte Verteilung
3. Protokollübergreifende Whitelists
Interoperabler Zugriff mit einer Whitelist für mehrere Verwendungszwecke, Reputationsportabilität, Ökosystempartnerschaften
4. Regulierungstechnologie
Compliance-Automatisierung mit Echtzeitprüfungen der Gerichtsbarkeit, dynamischem Whitelisting, behördlicher Berichterstattung
Fazit
Token-Whitelisting bietet eine wesentliche Zugriffskontrolle für Kryptowährungsprojekte und ermöglicht die Einhaltung gesetzlicher Vorschriften, faire Verteilung, Community-Aufbau und Sicherheit. Von einfacher Mapping-Speicherung bis hin zu ausgefeilten Merkle-Bäumen und Signaturverifizierung hängen die Implementierungsoptionen von der Skalierung, den Flexibilitätsanforderungen und den Gasaspekten ab.
Wichtige Erkenntnisse:
- • Wählen Sie die richtige Methode: Mapping für kleine/dynamische Listen, Merkle für große/statische Listen, Signaturen für Flexibilität
- • Balance zwischen Zugang und Fairness: Klare Kriterien, transparente Auswahl, Community-First-Ansatz
- • Sicherheit priorisieren: Verträge prüfen, Admin-Schlüssel sichern, Benutzerdaten schützen
- • UX optimieren: Einfache Prozesse, klare Anweisungen, hilfreiche Tools
- • Bleiben Sie konform: Befolgen Sie die Vorschriften, implementieren Sie KYC bei Bedarf, dokumentieren Sie alles
Mit der Weiterentwicklung der Kryptowährung wird das Whitelisting immer ausgefeilter, automatisierter und datenschutzkonformer. Projekte, die Whitelisting sorgfältig umsetzen – also Zugangskontrolle mit Fairness, Sicherheit mit Benutzerfreundlichkeit und Einhaltung von Dezentralisierung in Einklang bringen – werden stärkere Communities und erfolgreichere Token-Einführungen schaffen.
Häufig gestellte Fragen
F: Warum verwenden Projekte Whitelists anstelle von offenen Verkäufen?
A: Whitelists ermöglichen: (1) Einhaltung gesetzlicher Vorschriften (akkreditierte Investoren, geografische Beschränkungen), (2) Bot-Prävention, (3) gerechte Verteilung an die Community, (4) kontrollierte Einführung aus Sicherheitsgründen.
F: Wie werde ich für eine NFT-Mint auf die Whitelist gesetzt?
A: Typischerweise: (1) Dem Projekt Discord/Social Media beitreten, (2) Mit der Community interagieren, (3) Den Anwendungsanweisungen folgen, (4) Verifizierung abschließen (KYC, falls erforderlich), (5) Wallet-Adresse übermitteln, (6) Auf Bestätigung warten. Jedes Projekt ist anders.
F: Können Whitelists nach der Bereitstellung geändert werden?
A: Hängt von der Implementierung ab. Speicherzuordnung: Ja (sofern Admin-Steuerelemente enthalten). Merkle-Baum: erfordert die Aktualisierung des Root-Hashs. Signatur: ja (Backend-gesteuert). NFT-Gating: automatisch basierend auf dem Eigentum.
F: Sind Whitelist-Plätze übertragbar?
A: Normalerweise nein für adressbasierte Whitelists (gebunden an eine bestimmte Wallet). Ausnahme: Der NFT-/Token-Gated-Zugriff ist mit dem NFT-/Token-Eigentum übertragbar.
F: Was ist der Unterschied bei den Benzinkosten zwischen den Whitelist-Methoden?
A: Zuordnung: 20.000+ Gas pro Adresszusatz. Merkle: ~3.000–5.000 Gas zur Überprüfung (konstant, unabhängig von der Größe der Whitelist). Unterschrift: ~3.000-5.000 Gas zur Überprüfung. Die Gaseinsparungen skalieren dramatisch mit der Listengröße.