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:

OrdnerEnthä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:

PfadWas es ist
tokenlist.jsondie TokenFormat der Uniswap Token Lists; jeder Eintrag hat chainId 78270
tags.jsondie 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:

text
https://raw.githubusercontent.com/PickleChain/token-list/main/testnet/tokenlist.json
https://raw.githubusercontent.com/PickleChain/token-list/main/testnet/tags.json
logoURI lesen, nicht zusammenbauen

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:

RouteLiefert
GET /api/tokenlisttokenlist.json, wie zuletzt validiert503, bis es eine erste gute Kopie gibt
GET /api/tagstags.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.

Wie lange es dauert, bis ein Merge sichtbar wird

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:

  1. 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.
  2. 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.
  3. Hängen Sie einen Eintrag an tokens in testnet/tokenlist.json an, wie im Beispiel unten.
  4. 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 Sie timestamp auf jetzt, in ISO 8601 UTC.
  5. 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.
  6. Ö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.
testnet/tokenlist.json - ein Eintrag in tokens
{
  "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.

FeldRegel
chainId78270das Netzwerk des Ordners; alles andere fällt durch
addressmit EIP-55-Prüfsummeeindeutig in der Liste
name1-40 Zeichenwas die Apps neben dem Logo zeigen
symbol1-20 Zeichen, keine Leerzeicheneindeutig in der Liste, ohne Beachtung der Groß- und Kleinschreibung
decimalsGanzzahl 0-255der Wert, den decimals() des Vertrags zurückgibt
logoURIeine Raw-URL in testnet/logos/tokens/die nach der Adresse benannte Datei, .png oder .svg
tagsoptionalIDs, die in den tags der obersten Ebene der Liste definiert sind, höchstens 10
extensionsoptionalhöchstens 10 Werte, jeder ein String, eine Zahl, ein Boolean oder null

Der ganze Ablauf auf der Kommandozeile:

bash
# 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

RegelAnforderung
FormatPNG oder SVGder Typ wird an den Bytes geprüft, nicht an der Dateiendung
PNG-Größegenau 256 x 256 Pixel
Dateigrößehöchstens 100 KB
Dateiname<Adresse mit Prüfsumme>.png oder .svgfür einen Token; auf GitHub zählt die Groß- und Kleinschreibung
Ortderselbe Netzwerkordner wie die Listeeine Testnet-Liste darf nur auf testnet/logos/ verweisen
Gestaltungquadratisch, 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.

  1. Fügen Sie einen Eintrag hinzu, in tags in testnet/tags.json, geschlüsselt nach der Adresse mit Prüfsumme.
  2. Fügen Sie optional ein Logo hinzu, in testnet/logos/tags/ - dieselben Formatregeln wie für ein Token-Logo, beliebiger Dateiname - und lassen Sie logo auf seine Raw-URL zeigen. Mehrere Tags eines Projekts können sich eine Datei teilen.
  3. Erhöhen Sie die Version von tags.json und dessen timestamp, führen Sie npm test aus und öffnen Sie den Pull Request.
testnet/tags.json - ein Eintrag in tags
"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."
}
FeldRegel
name1-40 Zeichen, eindeutig in der Dateiwird statt der Adresse angezeigt, also kurz und konkret halten
categoryein Schlüssel aus categoriessiehe die Liste unten
project1-40 Zeichendas Projekt, zu dem der Vertrag gehört
urlein https://-Link oder nullPflicht: null schreiben, wenn es keinen gibt
logoeine Raw-URL in testnet/logos/tags/ oder nullPflicht: null schreiben, wenn es keines gibt
noteoptional, höchstens 200 Zeichenwas der Vertrag tut, in einem Satz

Die heute definierten Kategorien:

SchlüsselFür
tokenein Token-VertragMetadaten und Logo liegen in tokenlist.json; der Tag gibt ihm ein Label
protocolKernverträgeGebühren, Staking, Burning, Faucet, Registry
bridgedie ETH-Bridgezwischen der Pickle Chain und ihrer Settlement-Schicht
dexVerträge der Pepper-BörseFactories, Router, Quoter und der Token-Launcher
poolein Liquiditätspool auf Pepper
toolkitVerträge des ToolkitsMultisend, Locker, Streams und die Deploy-Factory
namesder Pickle Name Service
oraclePreisfeeds
arcadedie 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 logoURI und 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.

ÄnderungSprung
Ein Eintrag entferntmajoraus 1.4.2 wird 2.0.0
Ein Eintrag hinzugefügtminoraus 1.4.2 wird 1.5.0
Ein Eintrag geändertpatchaus 1.4.2 wird 1.4.3
bash
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:

MeldungBehebung
is not EIP-55 checksummed (expected …)die Adresse verwenden, die die Meldung ausgibt
logo file must be named after the checksummed addressdas 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 256x256das Bild auf 256 x 256 skalieren
… bytes, the limit is 102400komprimieren oder ein SVG verwenden
not referenced by this network's tokenlist.json or tags.json; remove itdas ü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 itdie Version erhöhen - siehe Versionen
this change needs a minor version bumpeine Aufnahme ist minor und eine Entfernung major; ein Patch reicht nicht
update timestamp when the version changestimestamp 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 categorieseinen vorhandenen Schlüssel verwenden oder die Kategorie im selben Pull Request hinzufügen
SVG must not reference external resourcesalles einbetten; externe href- und url()-Referenzen entfernen