Für Entwickler / Tokens
Token-Liste und Adress-Tags
Ein öffentliches Repository entscheidet, welche Token das Verifiziert-Kennzeichen tragen, welches Logo und welchen Namen sie zeigen und welches Label ein Vertrag statt seiner Adresse bekommt. Hineinzukommen ist ein Pull Request.
Was die Liste ist
Zwei Dateien pro Netzwerk. tokenlist.json führt die geprüften Token auf, im Standardformat der Uniswap Token Lists, sodass jede Wallet, jede DEX-Oberfläche und jeder Aggregator sie unverändert importieren kann. tags.json gibt bekannten Verträgen ein lesbares Label - einen Namen, eine Kategorie und ein Projekt -, sodass ein Explorer „Pepper router“ anzeigen kann, wo er sonst eine hexadezimale Adresse zeigen würde.
Ein gelisteter Token bekommt das Verifiziert-Kennzeichen, sein Logo, seinen Namen und sein Symbol im Explorer, auf Pepper, im Toolkit, auf Names und auf der Account-Seite. Ein getaggter Vertrag erscheint mit seinem Label in Transaktionslisten, auf Adressseiten und in der Suche.
Was das Kennzeichen aussagt und was nicht
Das Verifiziert-Kennzeichen sagt, dass der Token geprüft wurde und dass seine Vertragsadresse die richtige für diesen Namen ist. Es ist keine Anlageberatung, keine Empfehlung und kein Audit des Vertrags.
Nichts wird automatisch gelistet. Ein Token, der mit dem Token-Launcher von Pepper gestartet wurde, wird nicht deshalb aufgenommen, weil es ihn gibt; er wird aufgenommen, wenn jemand einen Pull Request öffnet und er die Kriterien erfüllt.
Wo sie liegt
Die Liste liegt in einem öffentlichen GitHub-Repository, github.com/PickleChain/token-list, mit einem Ordner pro Netzwerk:
| Ordner | Enthält |
|---|---|
| testnet/ | Chain-ID 78270die Liste, die die Pickle-Apps heute lesen |
| mainnet/ | vorerst leerListe und Tags des Mainnets werden in diesem Ordner veröffentlicht, wenn das Mainnet startet |
| schemas/ | tags.schema.jsondas JSON Schema von tags.json |
| scripts/ | validate.mjsder Validator, den npm test und die CI ausführen |
Innerhalb eines Netzwerkordners:
| Pfad | Was es ist |
|---|---|
| tokenlist.json | die TokenFormat der Uniswap Token Lists; jeder Eintrag hat chainId 78270 |
| tags.json | die Adress-Tagsnach der Vertragsadresse mit Prüfsumme geschlüsselt |
| logos/tokens/ | ein Logo pro Tokenbenannt nach der Adresse des Tokens mit Prüfsumme |
| logos/tags/ | ProjektlogosLogos, auf die Tags verweisen; mehrere Tags können sich eines teilen |
Die Raw-URLs, immer auf dem neuesten Commit von main:
https://raw.githubusercontent.com/PickleChain/token-list/main/testnet/tokenlist.json https://raw.githubusercontent.com/PickleChain/token-list/main/testnet/tags.json
Das Logo eines Tokens kann ein PNG oder ein SVG sein, nehmen Sie die URL also aus dem logoURI des Eintrags (oder dem logo eines Tags), statt sie aus der Adresse zusammenzusetzen.
Für eine Website holen Sie die Dateien serverseitig und liefern sie von Ihrer eigenen Herkunft aus, statt raw.githubusercontent.com aus den Browsern Ihrer Besucher direkt einzubinden: So bleiben deren IP-Adressen bei keinem Dritten, Sie geraten nicht in die Ratenbegrenzung von GitHub und können die letzte gute Kopie behalten, wenn GitHub nicht erreichbar ist. In einer Wallet oder einer DEX-Oberfläche fügen Sie die Raw-URL von tokenlist.json als eigene Token-Liste hinzu.
Wie die Pickle-Apps sie nutzen
Die Explorer-API ist der einzige Teil des Pickle-Stacks, der für diese Dateien mit GitHub spricht. Sie holt beide etwa alle zehn Minuten, validiert jede Datei als Ganzes - Struktur, Chain-ID, Prüfsummen, Duplikate - und behält die letzte gute Kopie im Speicher und auf der Festplatte. Eine Datei, die durchfällt, wird vollständig verworfen, und die vorherige bleibt im Dienst, sodass ein fehlerhafter Commit nie ein Label oder ein Logo leeren kann. Jede Pickle-Website liest dann die Kopie des Explorers von ihrer eigenen Herkunft:
| Route | Liefert |
|---|---|
| GET /api/tokenlist | tokenlist.json, wie zuletzt validiert503, bis es eine erste gute Kopie gibt |
| GET /api/tags | tags.json, wie zuletzt validiert |
| GET /api/tokenlogo/{address} | die Bytes des Token-Logos404, wenn der Token nicht gelistet ist oder kein Logo hat |
| GET /api/taglogo/{address} | die Bytes des Tag-Logos |
Die Routen liegen auf https://explorer.picklechain.xyz, hinter der CORS-Allowlist des Explorers: Sie bedienen die Pickle-Websites. Ihre eigene Anwendung liest die Raw-Dateien von oben.
Etwa zehn Minuten nach dem Merge eines Pull Requests steht der neue Eintrag in jeder Pickle-App; mit dem Cache von GitHub und den Caches der Websites dazwischen können es bis zu zwanzig werden. Ein Logo, das unter demselben Dateinamen ersetzt wird, kann bis zu sechs Stunden brauchen, weil Logos nach URL gecacht werden.
Einen Token hinzufügen
Prüfen Sie zuerst die Kriterien: Ein Pull Request für einen Token, der sie nicht erfüllt, wird geschlossen. Dann, auf Ihrem Fork des Repositorys:
- Besorgen Sie die Adresse mit Prüfsumme. EIP-55 in gemischter Schreibweise, nicht alles klein. Ist Ihre falsch, gibt der Validator die erwartete Form aus.
- Fügen Sie das Logo hinzu, in
testnet/logos/tokens/, exakt nach dieser Adresse benannt:testnet/logos/tokens/0x0000…dEaD.png(oder.svg). Es muss den Regeln für Logos folgen. - Hängen Sie einen Eintrag an
tokensintestnet/tokenlist.jsonan, wie im Beispiel unten. - Erhöhen Sie die Version von
tokenlist.json- einen Token hinzuzufügen ist ein Minor-Sprung, aus 1.4.2 wird 1.5.0 - und setzen Sietimestampauf jetzt, in ISO 8601 UTC. - Führen Sie die Prüfungen aus mit
npm test. Das braucht Node 22 oder neuer und sonst nichts: Der Validator hat keine Abhängigkeiten, es gibt also nichts zu installieren. - Öffnen Sie einen Pull Request gegen
main. Verlinken Sie in seiner Beschreibung einen Beitrag auf der eigenen Website oder dem offiziellen Account des Projekts, der die Vertragsadresse nennt.
{
"chainId": 78270,
"address": "0x0000…dEaD",
"name": "Example Token",
"symbol": "EXM",
"decimals": 18,
"logoURI": "https://raw.githubusercontent.com/PickleChain/token-list/main/testnet/logos/tokens/0x0000…dEaD.png",
"extensions": {
"website": "https://your-project.example",
"explorer": "https://explorer.picklechain.xyz/address/0x0000…dEaD"
}
}0x0000…dEaD steht für Ihre vollständige, 42 Zeichen lange Adresse mit Prüfsumme; es ist ein Platzhalter, kein Token.
| Feld | Regel |
|---|---|
| chainId | 78270das Netzwerk des Ordners; alles andere fällt durch |
| address | mit EIP-55-Prüfsummeeindeutig in der Liste |
| name | 1-40 Zeichenwas die Apps neben dem Logo zeigen |
| symbol | 1-20 Zeichen, keine Leerzeicheneindeutig in der Liste, ohne Beachtung der Groß- und Kleinschreibung |
| decimals | Ganzzahl 0-255der Wert, den decimals() des Vertrags zurückgibt |
| logoURI | eine Raw-URL in testnet/logos/tokens/die nach der Adresse benannte Datei, .png oder .svg |
| tags | optionalIDs, die in den tags der obersten Ebene der Liste definiert sind, höchstens 10 |
| extensions | optionalhöchstens 10 Werte, jeder ein String, eine Zahl, ein Boolean oder null |
Der ganze Ablauf auf der Kommandozeile:
# Fork and clone (or fork on the website and clone your fork): gh repo fork PickleChain/token-list --clone cd token-list git checkout -b add-exm # Logo, entry, version and timestamp, then: npm test git add testnet/tokenlist.json testnet/logos/tokens/ git commit -m "Add Example Token (EXM)" git push origin add-exm # ...and open the pull request on GitHub.
Regeln für Logos
| Regel | Anforderung |
|---|---|
| Format | PNG oder SVGder Typ wird an den Bytes geprüft, nicht an der Dateiendung |
| PNG-Größe | genau 256 x 256 Pixel |
| Dateigröße | höchstens 100 KB |
| Dateiname | <Adresse mit Prüfsumme>.png oder .svgfür einen Token; auf GitHub zählt die Groß- und Kleinschreibung |
| Ort | derselbe Netzwerkordner wie die Listeeine Testnet-Liste darf nur auf testnet/logos/ verweisen |
| Gestaltung | quadratisch, bei 20 Pixeln lesbartransparenter oder einfarbiger Hintergrund; Apps schneiden meist auf einen Kreis zu |
Ein SVG muss eine schlichte Zeichnung sein
Kein <script>, keine Event-Handler-Attribute, kein <foreignObject>, kein externes href oder url(), kein DOCTYPE. Reichen Sie nur Grafiken ein, die Ihnen gehören oder die Sie verwenden dürfen.
Jede Datei unter logos/ muss von der Liste oder den Tags referenziert werden. Ein Logo, auf das nichts verweist, fällt bei den Prüfungen durch, entfernen Sie es also im selben Pull Request wie seinen Eintrag.
Einen Adress-Tag hinzufügen
Tags sind für Verträge gedacht, denen man in Transaktionen begegnet: Protokollverträge, Router, Factories, Pools, Vaults, Spiele, Bridges. Private Wallets werden nie getaggt. Das Projekt muss auf der Pickle Chain live sein, und die Adresse muss sich in der eigenen Dokumentation oder den Deployment-Dateien des Projekts überprüfen lassen.
- Fügen Sie einen Eintrag hinzu, in
tagsintestnet/tags.json, geschlüsselt nach der Adresse mit Prüfsumme. - Fügen Sie optional ein Logo hinzu, in
testnet/logos/tags/- dieselben Formatregeln wie für ein Token-Logo, beliebiger Dateiname - und lassen Sielogoauf seine Raw-URL zeigen. Mehrere Tags eines Projekts können sich eine Datei teilen. - Erhöhen Sie die Version von
tags.jsonund dessentimestamp, führen Sienpm testaus und öffnen Sie den Pull Request.
"0x0000…dEaD": {
"name": "Example vault",
"category": "protocol",
"project": "Example",
"url": "https://your-project.example",
"logo": "https://raw.githubusercontent.com/PickleChain/token-list/main/testnet/logos/tags/example.png",
"note": "Holds deposits and pays out the weekly yield."
}| Feld | Regel |
|---|---|
| name | 1-40 Zeichen, eindeutig in der Dateiwird statt der Adresse angezeigt, also kurz und konkret halten |
| category | ein Schlüssel aus categoriessiehe die Liste unten |
| project | 1-40 Zeichendas Projekt, zu dem der Vertrag gehört |
| url | ein https://-Link oder nullPflicht: null schreiben, wenn es keinen gibt |
| logo | eine Raw-URL in testnet/logos/tags/ oder nullPflicht: null schreiben, wenn es keines gibt |
| note | optional, höchstens 200 Zeichenwas der Vertrag tut, in einem Satz |
Die heute definierten Kategorien:
| Schlüssel | Für |
|---|---|
| token | ein Token-VertragMetadaten und Logo liegen in tokenlist.json; der Tag gibt ihm ein Label |
| protocol | KernverträgeGebühren, Staking, Burning, Faucet, Registry |
| bridge | die ETH-Bridgezwischen der Pickle Chain und ihrer Settlement-Schicht |
| dex | Verträge der Pepper-BörseFactories, Router, Quoter und der Token-Launcher |
| pool | ein Liquiditätspool auf Pepper |
| toolkit | Verträge des ToolkitsMultisend, Locker, Streams und die Deploy-Factory |
| names | der Pickle Name Service |
| oracle | Preisfeeds |
| arcade | die Arcade-Bank und ihre Spiele |
Passt keine, schlagen Sie im selben Pull Request eine neue Kategorie vor: einen kleingeschriebenen Schlüssel von bis zu 20 Zeichen, mit einem name und einer description.
Einen Eintrag ändern oder entfernen
- Einen Eintrag ändern - einen Namen, eine Notiz, eine Website, die Dezimalstellen - indem Sie ihn an Ort und Stelle bearbeiten und die Patch-Version erhöhen. Der Pull Request kommt vom Team des Tokens, wie bei einer Aufnahme.
- Ein Logo ändern, indem Sie die Datei ersetzen. Ein Wechsel zwischen PNG und SVG benennt sie um, aktualisieren Sie also
logoURIund löschen Sie die alte Datei. - Einen Vertrag ersetzen, indem Sie die neue Adresse hinzufügen. Bei einem Tag behalten Sie den alten Eintrag und hängen an seinen Namen
(previous)an, damit alte Transaktionen weiterhin klar lesbar sind. - Einen Eintrag entfernen, indem Sie ihn und seine Logodatei löschen, mit einem Major-Sprung der Version.
Maintainer können einen Token jederzeit entfernen - nach einem Exploit, einem Rug Pull, einem Wechsel auf einen neuen Vertrag oder einer irreführenden Änderung der Metadaten.
Versionen
Jede Datei trägt ihre eigene version, und der Sprung folgt den Regeln der Token Lists. Die CI setzt ihn gegen den Basis-Branch des Pull Requests durch, und eine geänderte Version braucht einen neueren timestamp.
| Änderung | Sprung |
|---|---|
| Ein Eintrag entfernt | majoraus 1.4.2 wird 2.0.0 |
| Ein Eintrag hinzugefügt | minoraus 1.4.2 wird 1.5.0 |
| Ein Eintrag geändert | patchaus 1.4.2 wird 1.4.3 |
npm test # every list and logo, then the validator's own tests node scripts/validate.mjs --base origin/main # also the version bumps, as CI checks them
Was das Review prüft
Jeder Pull Request führt npm test und die Versionsprüfung in GitHub Actions aus, danach prüft ihn ein Maintainer. Ein Token wird aufgenommen, wenn all das zutrifft:
- Er ist im Netzwerk dieses Ordners deployt, und sein Quelltext ist verifiziert oder veröffentlicht.
- Der Pull Request wird vom Team des Tokens geöffnet oder bestätigt, mit einem Link auf einen Beitrag auf der eigenen Website oder dem offiziellen Account des Projekts, der die Vertragsadresse nennt.
- Name und Symbol imitieren keinen anderen Token und kein anderes Projekt. Ein neuer PKL oder WETH wird abgelehnt.
- Er wird tatsächlich genutzt: Liquidität auf Pepper, Halter oder ein laufendes Produkt - kein Token, der vor ein paar Minuten gestartet wurde.
- Der Vertrag hat keinen versteckten Mint, keine Blacklist und keinen Gebührenschalter, den das Team nicht offengelegt hat.
Ein Tag wird aufgenommen, wenn die Adresse ein Vertrag ist, das Projekt auf der Pickle Chain live ist und sich die Adresse in der eigenen Dokumentation oder den Deployment-Dateien des Projekts überprüfen lässt.
Häufige Validierungsfehler
npm test gibt jedes Problem aus, nicht nur das erste. Die häufigsten und ihre Behebung:
| Meldung | Behebung |
|---|---|
| is not EIP-55 checksummed (expected …) | die Adresse verwenden, die die Meldung ausgibt |
| logo file must be named after the checksummed address | das Logo exakt nach der Adresse in gemischter Schreibweise umbenennen |
| referenced but missing (case matters on GitHub) | Dateiname und logoURI weichen ab, oft nur in der Groß- und Kleinschreibung |
| PNG is 512x512, it must be 256x256 | das Bild auf 256 x 256 skalieren |
| … bytes, the limit is 102400 | komprimieren oder ein SVG verwenden |
| not referenced by this network's tokenlist.json or tags.json; remove it | das übrig gebliebene Logo löschen oder den Eintrag korrigieren, der darauf verweist |
| symbol "EXM" repeats tokens[3] | das Symbol ist vergeben; Symbole sind eindeutig |
| the file changed but version stayed 1.4.2; bump it | die Version erhöhen - siehe Versionen |
| this change needs a minor version bump | eine Aufnahme ist minor und eine Entfernung major; ein Patch reicht nicht |
| update timestamp when the version changes | timestamp auf die aktuelle UTC-Zeit setzen |
| "logo" is required (use null for url or logo when there is none) | "logo": null oder "url": null schreiben, statt das Feld wegzulassen |
| category "vault" is not defined in categories | einen vorhandenen Schlüssel verwenden oder die Kategorie im selben Pull Request hinzufügen |
| SVG must not reference external resources | alles einbetten; externe href- und url()-Referenzen entfernen |