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:

CarpetaContiene
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:

RutaQué es
tokenlist.jsonlos tokensformato Uniswap Token Lists; cada entrada lleva chainId 78270
tags.jsonlas 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:

text
https://raw.githubusercontent.com/PickleChain/token-list/main/testnet/tokenlist.json
https://raw.githubusercontent.com/PickleChain/token-list/main/testnet/tags.json
Lea logoURI, no la construya

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:

RutaSirve
GET /api/tokenlisttokenlist.json tal como se validó por última vez503 hasta que exista una primera copia válida
GET /api/tagstags.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.

Cuánto tarda en verse una fusión

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:

  1. 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.
  2. 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.
  3. Añada una entrada al final de tokens en testnet/tokenlist.json, como en el ejemplo de abajo.
  4. Suba la versión de tokenlist.json - añadir un token es un cambio menor, 1.4.2 pasa a 1.5.0 - y ponga timestamp a la hora actual, en ISO 8601 UTC.
  5. 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.
  6. 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.
testnet/tokenlist.json - una entrada de 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 representa su dirección completa de 42 caracteres con checksum; es un marcador de posición, no un token.

CampoRegla
chainId78270la red de la carpeta; cualquier otro valor falla
addresscon checksum EIP-55única en la lista
name1-40 caractereslo que las aplicaciones muestran junto al logo
symbol1-20 caracteres, sin espaciosúnico en la lista, sin distinguir mayúsculas y minúsculas
decimalsentero 0-255el valor que devuelve decimals() del contrato
logoURIuna URL raw dentro de testnet/logos/tokens/el archivo con el nombre de la dirección, .png o .svg
tagsopcionalids definidos en los tags de nivel superior de la lista, 10 como máximo
extensionsopcional10 valores como máximo, cada uno una cadena, un número, un booleano o null

El recorrido completo en la línea de comandos:

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.

Reglas de los logos

ReglaRequisito
FormatoPNG o SVGel tipo se comprueba a partir de los bytes, no de la extensión
Tamaño del PNGexactamente 256 x 256 píxeles
Tamaño del archivo100 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ónla misma carpeta de red que la listauna lista de testnet solo puede apuntar a testnet/logos/
Diseñocuadrado, 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.

  1. Añada una entrada a tags en testnet/tags.json, indexada por la dirección con checksum.
  2. 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 que logo apunte a su URL raw. Varias etiquetas de un mismo proyecto pueden compartir un archivo.
  3. Suba la versión de tags.json y su timestamp, ejecute npm test y abra la pull request.
testnet/tags.json - una entrada de 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."
}
CampoRegla
name1-40 caracteres, único en el archivose muestra en lugar de la dirección, así que manténgalo corto y concreto
categoryuna clave de categoriesvea la lista de abajo
project1-40 caracteresel proyecto al que pertenece el contrato
urlun enlace https://, o nullobligatorio: escriba null cuando no haya
logouna URL raw dentro de testnet/logos/tags/, o nullobligatorio: escriba null cuando no haya
noteopcional, 200 caracteres como máximoqué hace el contrato, en una frase

Las categorías definidas hoy:

ClavePara
tokenun contrato de tokenlos metadatos y el logo están en tokenlist.json; la etiqueta le da un nombre
protocolcontratos centralescomisiones, staking, quema, faucet, registro
bridgeel puente de ETHentre Pickle Chain y su capa de liquidación
dexcontratos del exchange Pepperfactorías, routers, quoters y el lanzador de tokens
poolun pool de liquidez de Pepper
toolkitcontratos del Toolkitmultisend, locker, streams y la factoría de despliegue
namesel Pickle Name Service
oraclefuentes de precios
arcadela 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 logoURI y 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.

CambioIncremento
Se retira una entradamajor1.4.2 pasa a 2.0.0
Se añade una entradaminor1.4.2 pasa a 1.5.0
Se modifica una entradapatch1.4.2 pasa a 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

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:

MensajeSolución
is not EIP-55 checksummed (expected …)use la dirección que indica el mensaje
logo file must be named after the checksummed addressrenombre 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 256x256redimensione la imagen a 256 x 256
… bytes, the limit is 102400comprímalo, o use un SVG
not referenced by this network's tokenlist.json or tags.json; remove itborre 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 itsuba la versión - vea Versiones
this change needs a minor version bumpun alta es minor y una baja major; un patch no basta
update timestamp when the version changesponga 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 categoriesuse una clave existente, o añada la categoría en la misma pull request
SVG must not reference external resourcesinclúyalo todo en línea; elimine las referencias href y url() externas