Para desarrolladores / Tokens
Lista de tokens y etiquetas de dirección
Un único repositorio público decide qué tokens llevan la marca de verificación, qué logo y qué nombre muestran, y qué etiqueta recibe un contrato en lugar de su dirección. Entrar en él es cuestión de una pull request.
Qué es la lista
Dos archivos por red. tokenlist.json recoge los tokens revisados, en el formato estándar Uniswap Token Lists, de modo que cualquier wallet, interfaz de DEX o agregador puede importarlo tal cual. tags.json da a los contratos conocidos una etiqueta legible - un nombre, una categoría y un proyecto - para que un explorador pueda mostrar «router de Pepper» donde de otro modo mostraría una dirección hexadecimal.
Un token listado recibe la marca de verificación, su logo, su nombre y su símbolo en el explorador, en Pepper, en el Toolkit, en Names y en la página Account. Un contrato etiquetado aparece con su etiqueta en las listas de transacciones, en las páginas de dirección y en la búsqueda.
Lo que dice la marca, y lo que no dice
La marca de verificación dice que el token fue revisado y que la dirección de su contrato es la correcta para ese nombre. No es un consejo de inversión, ni un respaldo, ni una auditoría del contrato.
Nada se lista automáticamente. Un token lanzado con el lanzador de tokens de Pepper no se añade por el mero hecho de existir; se añade cuando alguien abre una pull request y cumple los criterios.
Dónde está
La lista vive en un repositorio público de GitHub, github.com/PickleChain/token-list, con una carpeta por red:
| Carpeta | Contiene |
|---|---|
| testnet/ | chain ID 78270la lista que leen hoy las aplicaciones de Pickle |
| mainnet/ | vacía por ahorala lista y las etiquetas de mainnet se publican en esta carpeta cuando se lance la mainnet |
| schemas/ | tags.schema.jsonel JSON Schema de tags.json |
| scripts/ | validate.mjsel validador que ejecutan npm test y la CI |
Dentro de la carpeta de una red:
| Ruta | Qué es |
|---|---|
| tokenlist.json | los tokensformato Uniswap Token Lists; cada entrada lleva chainId 78270 |
| tags.json | las etiquetas de direcciónindexadas por la dirección del contrato con checksum |
| logos/tokens/ | un logo por tokencon el nombre de la dirección con checksum del token |
| logos/tags/ | logos de proyectoa los que apuntan las etiquetas; varias etiquetas pueden compartir uno |
Las URL raw, siempre el último commit de main:
https://raw.githubusercontent.com/PickleChain/token-list/main/testnet/tokenlist.json https://raw.githubusercontent.com/PickleChain/token-list/main/testnet/tags.json
El logo de un token puede ser un PNG o un SVG, así que tome la URL del campo logoURI de la entrada (o del logo de una etiqueta) en lugar de componerla a partir de la dirección.
En un sitio web, descargue los archivos desde el servidor y sírvalos desde su propio origen en lugar de enlazar raw.githubusercontent.com directamente desde el navegador de sus visitantes: así sus direcciones IP no llegan a un tercero, se mantiene lejos de los límites de tasa de GitHub y puede conservar la última copia válida cuando GitHub no responda. En una wallet o en una interfaz de DEX, añada la URL raw de tokenlist.json como lista de tokens personalizada.
Cómo la usan las aplicaciones de Pickle
La API del explorador es la única pieza de la pila de Pickle que habla con GitHub para obtener estos archivos. Descarga ambos más o menos cada diez minutos, valida cada archivo en su conjunto - forma, chain ID, checksums, duplicados - y guarda la última copia válida en memoria y en disco. Un archivo que falla se rechaza por completo y el anterior sigue en servicio, así que un commit defectuoso nunca puede dejar en blanco una etiqueta o un logo. Cada sitio de Pickle lee después la copia del explorador desde su propio origen:
| Ruta | Sirve |
|---|---|
| GET /api/tokenlist | tokenlist.json tal como se validó por última vez503 hasta que exista una primera copia válida |
| GET /api/tags | tags.json tal como se validó por última vez |
| GET /api/tokenlogo/{address} | los bytes del logo del token404 cuando el token no está listado o no tiene logo |
| GET /api/taglogo/{address} | los bytes del logo de la etiqueta |
Las rutas están en https://explorer.picklechain.xyz, detrás de la lista de orígenes CORS permitidos del explorador: sirven a los sitios de Pickle. Su propia aplicación lee los archivos raw de arriba.
Unos diez minutos después de fusionar una pull request, la nueva entrada está en todas las aplicaciones de Pickle; con la caché de GitHub y las de los sitios de por medio, puede tardar hasta veinte. Un logo sustituido con el mismo nombre de archivo puede tardar hasta seis horas, porque los logos se guardan en caché por URL.
Añadir un token
Revise primero los criterios: una pull request para un token que no los cumple se cierra. Después, en su fork del repositorio:
- Obtenga la dirección con checksum. Mayúsculas y minúsculas según EIP-55, no todo en minúsculas. Si la suya es incorrecta, el validador indica la forma esperada.
- Añada el logo a
testnet/logos/tokens/, con el nombre exacto de esa dirección:testnet/logos/tokens/0x0000…dEaD.png(o.svg). Debe cumplir las reglas de los logos. - Añada una entrada al final de
tokensentestnet/tokenlist.json, como en el ejemplo de abajo. - Suba la versión de
tokenlist.json- añadir un token es un cambio menor, 1.4.2 pasa a 1.5.0 - y pongatimestampa la hora actual, en ISO 8601 UTC. - Ejecute las comprobaciones con
npm test. Necesita Node 22 o posterior y nada más: el validador no tiene dependencias, así que no hay nada que instalar. - Abra una pull request contra
main. En su descripción, enlace una publicación del sitio web o de la cuenta oficial del propio proyecto que mencione la dirección del contrato.
{
"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 representa su dirección completa de 42 caracteres con checksum; es un marcador de posición, no un token.
| Campo | Regla |
|---|---|
| chainId | 78270la red de la carpeta; cualquier otro valor falla |
| address | con checksum EIP-55única en la lista |
| name | 1-40 caractereslo que las aplicaciones muestran junto al logo |
| symbol | 1-20 caracteres, sin espaciosúnico en la lista, sin distinguir mayúsculas y minúsculas |
| decimals | entero 0-255el valor que devuelve decimals() del contrato |
| logoURI | una URL raw dentro de testnet/logos/tokens/el archivo con el nombre de la dirección, .png o .svg |
| tags | opcionalids definidos en los tags de nivel superior de la lista, 10 como máximo |
| extensions | opcional10 valores como máximo, cada uno una cadena, un número, un booleano o null |
El recorrido completo en la línea de comandos:
# 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.
Reglas de los logos
| Regla | Requisito |
|---|---|
| Formato | PNG o SVGel tipo se comprueba a partir de los bytes, no de la extensión |
| Tamaño del PNG | exactamente 256 x 256 píxeles |
| Tamaño del archivo | 100 KB como máximo |
| Nombre del archivo | <dirección con checksum>.png o .svgpara un token; en GitHub las mayúsculas y minúsculas importan |
| Ubicación | la misma carpeta de red que la listauna lista de testnet solo puede apuntar a testnet/logos/ |
| Diseño | cuadrado, legible a 20 píxelesfondo transparente o liso; las aplicaciones suelen recortarlo en círculo |
Un SVG debe ser un dibujo sin más
Sin <script>, sin atributos de manejadores de eventos, sin <foreignObject>, sin href ni url() externos, sin DOCTYPE. Envíe solo diseños que sean suyos o que tenga permiso para usar.
Cada archivo bajo logos/ debe estar referenciado por la lista o por las etiquetas. Un logo al que nada apunta hace fallar las comprobaciones, así que elimínelo en la misma pull request que su entrada.
Añadir una etiqueta de dirección
Las etiquetas son para contratos con los que la gente se cruza en las transacciones: contratos de protocolo, routers, factorías, pools, vaults, juegos, puentes. Las wallets personales nunca se etiquetan. El proyecto debe estar en funcionamiento en Pickle Chain, y la dirección debe poder comprobarse en la documentación o en los archivos de despliegue del propio proyecto.
- Añada una entrada a
tagsentestnet/tags.json, indexada por la dirección con checksum. - Si quiere, añada un logo a
testnet/logos/tags/- las mismas reglas de formato que el logo de un token, con cualquier nombre de archivo - y haga quelogoapunte a su URL raw. Varias etiquetas de un mismo proyecto pueden compartir un archivo. - Suba la versión de
tags.jsony sutimestamp, ejecutenpm testy abra la 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."
}| Campo | Regla |
|---|---|
| name | 1-40 caracteres, único en el archivose muestra en lugar de la dirección, así que manténgalo corto y concreto |
| category | una clave de categoriesvea la lista de abajo |
| project | 1-40 caracteresel proyecto al que pertenece el contrato |
| url | un enlace https://, o nullobligatorio: escriba null cuando no haya |
| logo | una URL raw dentro de testnet/logos/tags/, o nullobligatorio: escriba null cuando no haya |
| note | opcional, 200 caracteres como máximoqué hace el contrato, en una frase |
Las categorías definidas hoy:
| Clave | Para |
|---|---|
| token | un contrato de tokenlos metadatos y el logo están en tokenlist.json; la etiqueta le da un nombre |
| protocol | contratos centralescomisiones, staking, quema, faucet, registro |
| bridge | el puente de ETHentre Pickle Chain y su capa de liquidación |
| dex | contratos del exchange Pepperfactorías, routers, quoters y el lanzador de tokens |
| pool | un pool de liquidez de Pepper |
| toolkit | contratos del Toolkitmultisend, locker, streams y la factoría de despliegue |
| names | el Pickle Name Service |
| oracle | fuentes de precios |
| arcade | la banca del arcade y sus juegos |
Si ninguna encaja, proponga una categoría nueva en la misma pull request: una clave en minúsculas de hasta 20 caracteres, con un name y una description.
Actualizar o retirar una entrada
- Modifique una entrada - un nombre, una nota, un sitio web, los decimales - editándola en su sitio y subiendo la versión de parche. Abra la pull request desde el equipo del token, igual que para una alta.
- Cambie un logo sustituyendo el archivo. Pasar de PNG a SVG o al revés le cambia el nombre, así que actualice
logoURIy borre el archivo antiguo. - Sustituya un contrato añadiendo la nueva dirección. En una etiqueta, conserve la entrada antigua y añada
(previous)al final de su nombre, para que las transacciones antiguas se sigan leyendo con claridad. - Retire una entrada borrándola junto con su archivo de logo, con un cambio de versión mayor.
Los mantenedores pueden retirar un token en cualquier momento - tras un exploit, un rug pull, un cambio a un contrato nuevo o una modificación engañosa de los metadatos.
Versiones
Cada archivo lleva su propia version, y el incremento sigue las reglas de Token Lists. La CI lo exige frente a la rama base de la pull request, y una versión modificada necesita un timestamp más reciente.
| Cambio | Incremento |
|---|---|
| Se retira una entrada | major1.4.2 pasa a 2.0.0 |
| Se añade una entrada | minor1.4.2 pasa a 1.5.0 |
| Se modifica una entrada | patch1.4.2 pasa a 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
Qué comprueba la revisión
Cada pull request ejecuta npm test y la comprobación de versión en GitHub Actions, y después la revisa un mantenedor. Un token se añade cuando se cumple todo lo siguiente:
- Está desplegado en la red de esa carpeta, y su código fuente está verificado o publicado.
- La pull request la abre o la confirma el equipo del token, con un enlace a una publicación en el sitio web o la cuenta oficial del propio proyecto que mencione la dirección del contrato.
- Su nombre y su símbolo no imitan a otro token o proyecto. Un nuevo PKL o WETH se rechaza.
- Tiene un uso real: liquidez en Pepper, holders o un producto en funcionamiento - no un token lanzado hace unos minutos.
- El contrato no tiene ningún mint oculto, lista negra o interruptor de comisiones que el equipo no haya declarado.
Una etiqueta se añade cuando la dirección es un contrato, el proyecto está en funcionamiento en Pickle Chain y la dirección puede comprobarse en la documentación o en los archivos de despliegue del propio proyecto.
Errores de validación frecuentes
npm test muestra todos los problemas, no solo el primero. Los más habituales, y cómo resolverlos:
| Mensaje | Solución |
|---|---|
| is not EIP-55 checksummed (expected …) | use la dirección que indica el mensaje |
| logo file must be named after the checksummed address | renombre el logo con la dirección exacta, respetando mayúsculas y minúsculas |
| referenced but missing (case matters on GitHub) | el nombre del archivo y logoURI difieren, a menudo solo en mayúsculas y minúsculas |
| PNG is 512x512, it must be 256x256 | redimensione la imagen a 256 x 256 |
| … bytes, the limit is 102400 | comprímalo, o use un SVG |
| not referenced by this network's tokenlist.json or tags.json; remove it | borre el logo sobrante, o corrija la entrada que apunta a él |
| symbol "EXM" repeats tokens[3] | el símbolo ya está ocupado; los símbolos son únicos |
| the file changed but version stayed 1.4.2; bump it | suba la versión - vea Versiones |
| this change needs a minor version bump | un alta es minor y una baja major; un patch no basta |
| update timestamp when the version changes | ponga timestamp a la hora UTC actual |
| "logo" is required (use null for url or logo when there is none) | escriba "logo": null o "url": null en lugar de omitir el campo |
| category "vault" is not defined in categories | use una clave existente, o añada la categoría en la misma pull request |
| SVG must not reference external resources | inclúyalo todo en línea; elimine las referencias href y url() externas |