Para desenvolvedores / Tokens
Lista de tokens e tags de endereço
Um único repositório público decide quais tokens levam a marca de verificado, que logo e que nome eles exibem e que rótulo um contrato recebe no lugar do seu endereço. Entrar nele é um pull request.
O que é a lista
Dois arquivos por rede. tokenlist.json lista os tokens revisados, no formato padrão Uniswap Token Lists, para que qualquer carteira, interface de DEX ou agregador possa importá-lo do jeito que está. tags.json dá a contratos conhecidos um rótulo legível - um nome, uma categoria e um projeto - para que um explorador possa mostrar "Pepper router" onde, de outro modo, mostraria um endereço hexadecimal.
Um token listado ganha a marca de verificado, o seu logo, o seu nome e o seu símbolo no explorador, no Pepper, no Toolkit, no Names e na página Account. Um contrato com tag aparece pelo seu rótulo nas listas de transações, nas páginas de endereço e na busca.
O que a marca diz, e o que ela não diz
A marca de verificado diz que o token foi revisado e que o endereço do contrato é o correto para aquele nome. Não é recomendação de investimento, nem endosso, nem auditoria do contrato.
Nada é listado automaticamente. Um token lançado com o lançador de tokens do Pepper não é adicionado só por existir; ele é adicionado quando alguém abre um pull request e ele atende aos critérios.
Onde ela fica
A lista fica num repositório público no GitHub, github.com/PickleChain/token-list, com uma pasta por rede:
| Pasta | Contém |
|---|---|
| testnet/ | chain ID 78270a lista que as aplicações Pickle leem hoje |
| mainnet/ | vazia por enquantoa lista e as tags da mainnet são publicadas nesta pasta quando a mainnet for lançada |
| schemas/ | tags.schema.jsono JSON Schema de tags.json |
| scripts/ | validate.mjso validador executado pelo npm test e pelo CI |
Dentro de uma pasta de rede:
| Caminho | O que é |
|---|---|
| tokenlist.json | os tokensformato Uniswap Token Lists; toda entrada tem chainId 78270 |
| tags.json | as tags de endereçoindexadas pelo endereço do contrato com checksum |
| logos/tokens/ | um logo por tokencom o nome do endereço com checksum do token |
| logos/tags/ | logos de projetospara os quais as tags apontam; várias tags podem compartilhar um só |
As URLs raw, sempre no ú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
O logo de um token pode ser um PNG ou um SVG, então pegue a URL do logoURI da entrada (ou do logo de uma tag) em vez de montá-la a partir do endereço.
Num site, busque os arquivos no servidor e sirva-os a partir da sua própria origem em vez de fazer hot-linking de raw.githubusercontent.com a partir do navegador dos visitantes: isso mantém os endereços IP deles longe de um terceiro, evita os limites de taxa do GitHub e permite guardar a última cópia boa quando o GitHub estiver inacessível. Numa carteira ou numa interface de DEX, adicione a URL raw de tokenlist.json como lista de tokens personalizada.
Como as aplicações Pickle a usam
A API do explorador é a única parte da pilha Pickle que fala com o GitHub para buscar esses arquivos. Ela busca os dois mais ou menos a cada dez minutos, valida cada arquivo por inteiro - formato, chain ID, checksums, duplicatas - e guarda a última cópia boa em memória e em disco. Um arquivo que falha é rejeitado por inteiro e o anterior continua em serviço, então um commit ruim nunca apaga um rótulo ou um logo. Cada site Pickle lê então a cópia do explorador a partir da sua própria origem:
| Rota | Serve |
|---|---|
| GET /api/tokenlist | tokenlist.json na última versão validada503 até existir uma primeira cópia boa |
| GET /api/tags | tags.json na última versão validada |
| GET /api/tokenlogo/{address} | os bytes do logo do token404 quando o token não está listado ou não tem logo |
| GET /api/taglogo/{address} | os bytes do logo da tag |
As rotas ficam em https://explorer.picklechain.xyz, atrás da allowlist de CORS do explorador: elas servem os sites Pickle. A sua própria aplicação lê os arquivos raw acima.
Cerca de dez minutos depois do merge de um pull request, a nova entrada está em todas as aplicações Pickle; com o cache do próprio GitHub e os caches dos sites no caminho, pode levar até vinte. Um logo substituído com o mesmo nome de arquivo pode levar até seis horas, porque os logos são armazenados em cache pela URL.
Adicionar um token
Confira os critérios primeiro: um pull request para um token que não os atende é fechado. Depois, no seu fork do repositório:
- Obtenha o endereço com checksum. Maiúsculas e minúsculas do EIP-55, não tudo em minúsculas. Se o seu estiver errado, o validador imprime a forma esperada.
- Adicione o logo em
testnet/logos/tokens/, com exatamente o nome desse endereço:testnet/logos/tokens/0x0000…dEaD.png(ou.svg). Ele precisa seguir as regras para logos. - Acrescente uma entrada a
tokensemtestnet/tokenlist.json, como no exemplo abaixo. - Suba a versão de
tokenlist.json- adicionar um token é um bump minor, 1.4.2 vira 1.5.0 - e definatimestampcomo agora, em ISO 8601 UTC. - Rode as verificações com
npm test. Precisa do Node 22 ou mais recente e de nada mais: o validador não tem dependências, então não há nada para instalar. - Abra um pull request contra
main. Na descrição, inclua o link de uma publicação do site próprio do projeto ou da sua conta oficial que cite o endereço do 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 o seu endereço completo com checksum, de 42 caracteres; é um marcador, não um token.
| Campo | Regra |
|---|---|
| chainId | 78270a rede da pasta; qualquer outro valor falha |
| address | com checksum EIP-55único na lista |
| name | 1-40 caractereso que as aplicações mostram ao lado do logo |
| symbol | 1-20 caracteres, sem espaçosúnico na lista, sem diferenciar maiúsculas e minúsculas |
| decimals | inteiro de 0 a 255o valor que decimals() do contrato retorna |
| logoURI | uma URL raw dentro de testnet/logos/tokens/o arquivo com o nome do endereço, .png ou .svg |
| tags | opcionalids definidos nas tags de nível superior da lista, no máximo 10 |
| extensions | opcionalno máximo 10 valores, cada um uma string, número, booleano ou null |
O ciclo completo na linha de comando:
# 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.
Regras para logos
| Regra | Exigência |
|---|---|
| Formato | PNG ou SVGo tipo é verificado pelos bytes, não pela extensão |
| Tamanho do PNG | exatamente 256 x 256 pixels |
| Tamanho do arquivo | 100 KB no máximo |
| Nome do arquivo | <endereço com checksum>.png ou .svgpara um token; maiúsculas e minúsculas importam no GitHub |
| Local | a mesma pasta de rede da listauma lista da testnet só pode apontar para testnet/logos/ |
| Arte | quadrada, legível a 20 pixelsfundo transparente ou sólido; as aplicações costumam recortar em círculo |
Um SVG precisa ser um desenho simples
Nada de <script>, nada de atributos de manipuladores de eventos, nada de <foreignObject>, nada de href ou url() externos, nada de DOCTYPE. Envie só artes que sejam suas ou que você tenha permissão para usar.
Todo arquivo em logos/ precisa ser referenciado pela lista ou pelas tags. Um logo para o qual nada aponta reprova nas verificações, então remova-o no mesmo pull request que a sua entrada.
Adicionar uma tag de endereço
As tags são para contratos que as pessoas encontram nas transações: contratos de protocolo, routers, factories, pools, vaults, jogos, bridges. Carteiras pessoais nunca recebem tag. O projeto precisa estar no ar na Pickle Chain, e o endereço precisa ser verificável na documentação ou nos arquivos de implantação do próprio projeto.
- Adicione uma entrada a
tagsemtestnet/tags.json, indexada pelo endereço com checksum. - Opcionalmente, adicione um logo em
testnet/logos/tags/- mesmas regras de formato que um logo de token, qualquer nome de arquivo - e apontelogopara a sua URL raw. Várias tags de um mesmo projeto podem compartilhar um só arquivo. - Suba a versão de
tags.jsone o seutimestamp, rodenpm teste abra o 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 | Regra |
|---|---|
| name | 1-40 caracteres, único no arquivoexibido no lugar do endereço, então mantenha-o curto e específico |
| category | uma chave de categoriesveja a lista abaixo |
| project | 1-40 caractereso projeto ao qual o contrato pertence |
| url | um link https://, ou nullobrigatório: escreva null quando não houver |
| logo | uma URL raw dentro de testnet/logos/tags/, ou nullobrigatório: escreva null quando não houver |
| note | opcional, no máximo 200 caractereso que o contrato faz, numa frase |
As categorias definidas hoje:
| Chave | Para |
|---|---|
| token | um contrato de tokenos metadados e o logo ficam em tokenlist.json; a tag dá a ele um rótulo |
| protocol | contratos centraistaxas, staking, queima, faucet, registro |
| bridge | a bridge de ETHentre a Pickle Chain e a sua camada de liquidação |
| dex | contratos da exchange Pepperfactories, routers, quoters e o lançador de tokens |
| pool | um pool de liquidez do Pepper |
| toolkit | contratos do Toolkitmultisend, locker, streams e a factory de deploy |
| names | o Pickle Name Service |
| oracle | feeds de preço |
| arcade | o banco do arcade e os seus jogos |
Se nenhuma servir, proponha uma nova categoria no mesmo pull request: uma chave em minúsculas de até 20 caracteres, com um name e uma description.
Atualizar ou remover uma entrada
- Altere uma entrada - um nome, uma nota, um site, as decimais - editando-a no lugar e subindo a versão patch. Abra o pull request a partir da equipe do token, como numa adição.
- Troque um logo substituindo o arquivo. Passar de PNG para SVG, ou o contrário, muda o nome dele, então atualize
logoURIe apague o arquivo antigo. - Substitua um contrato adicionando o novo endereço. Para uma tag, mantenha a entrada antiga e acrescente ao nome dela o sufixo
(previous), para que as transações antigas continuem claras. - Remova uma entrada apagando-a junto com o seu arquivo de logo, com um bump major da versão.
Os mantenedores podem remover um token a qualquer momento - depois de um exploit, de um rug pull, da troca por um novo contrato ou de uma alteração enganosa dos metadados.
Versões
Cada arquivo tem a sua própria version, e o bump segue as regras das Token Lists. O CI o impõe em relação ao branch de base do pull request, e uma versão alterada exige um timestamp mais recente.
| Mudança | Bump |
|---|---|
| Uma entrada removida | major1.4.2 vira 2.0.0 |
| Uma entrada adicionada | minor1.4.2 vira 1.5.0 |
| Uma entrada alterada | patch1.4.2 vira 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
O que a revisão verifica
Todo pull request executa npm test e a verificação de versão no GitHub Actions, e depois um mantenedor o revisa. Um token é adicionado quando tudo isto vale:
- Ele está implantado na rede daquela pasta, e o seu código-fonte está verificado ou publicado.
- O pull request é aberto ou confirmado pela equipe do token, com o link de uma publicação no site próprio do projeto ou na sua conta oficial que cite o endereço do contrato.
- O nome e o símbolo não imitam outro token ou projeto. Um novo PKL ou WETH é recusado.
- Ele tem uso real: liquidez no Pepper, detentores ou um produto no ar - não um token lançado há poucos minutos.
- O contrato não tem mint oculto, blacklist ou chave de taxa que a equipe não tenha divulgado.
Uma tag é adicionada quando o endereço é um contrato, o projeto está no ar na Pickle Chain e o endereço pode ser verificado na documentação ou nos arquivos de implantação do próprio projeto.
Erros de validação comuns
npm test imprime todos os problemas, não só o primeiro. Os que as pessoas mais encontram, e a correção:
| Mensagem | Correção |
|---|---|
| is not EIP-55 checksummed (expected …) | use o endereço que a mensagem imprime |
| logo file must be named after the checksummed address | renomeie o logo com o endereço exato, em maiúsculas e minúsculas |
| referenced but missing (case matters on GitHub) | o nome do arquivo e o logoURI diferem, muitas vezes só em maiúsculas e minúsculas |
| PNG is 512x512, it must be 256x256 | redimensione a imagem para 256 x 256 |
| … bytes, the limit is 102400 | comprima-a, ou use um SVG |
| not referenced by this network's tokenlist.json or tags.json; remove it | apague o logo que sobrou, ou corrija a entrada que aponta para ele |
| symbol "EXM" repeats tokens[3] | o símbolo já está em uso; os símbolos são únicos |
| the file changed but version stayed 1.4.2; bump it | suba a versão - veja Versões |
| this change needs a minor version bump | uma adição é minor e uma remoção é major; um patch não basta |
| update timestamp when the version changes | defina timestamp como a hora UTC atual |
| "logo" is required (use null for url or logo when there is none) | escreva "logo": null ou "url": null em vez de omitir o campo |
| category "vault" is not defined in categories | use uma chave existente, ou adicione a categoria no mesmo pull request |
| SVG must not reference external resources | coloque tudo inline; remova as referências externas de href e url() |