Для разработчиков / Токены
Список токенов и метки адресов
Один публичный репозиторий решает, какие токены получают отметку проверки, какой логотип и какое имя они показывают и какую подпись получает контракт вместо своего адреса. Попасть в него - это pull request.
Что такое список
Два файла на каждую сеть. tokenlist.json перечисляет проверенные токены в стандартном формате Uniswap Token Lists, так что любой кошелёк, интерфейс DEX или агрегатор может импортировать его как есть. tags.json даёт известным контрактам читаемую подпись - имя, категорию и проект, - чтобы обозреватель мог показать «Pepper router» там, где иначе стоял бы шестнадцатеричный адрес.
Токен из списка получает отметку проверки, свой логотип, имя и символ в обозревателе, на Pepper, в Toolkit, на Names и на странице Account. Контракт с меткой отображается под своей подписью в списках транзакций, на страницах адресов и в поиске.
Что означает отметка, а что нет
Отметка проверки говорит, что токен прошёл ревью и что адрес его контракта - правильный для этого имени. Это не инвестиционный совет, не одобрение и не аудит контракта.
Ничего не попадает в список автоматически. Токен, выпущенный через лаунчер токенов Pepper, не добавляется просто потому, что существует; он добавляется, когда кто-то открывает pull request и токен соответствует критериям.
Где он находится
Список находится в публичном репозитории GitHub, github.com/PickleChain/token-list, по одной папке на каждую сеть:
| Папка | Содержит |
|---|---|
| testnet/ | chain ID 78270список, который приложения Pickle читают сегодня |
| mainnet/ | пока пустосписок и метки основной сети публикуются в этой папке, когда запустится основная сеть |
| schemas/ | tags.schema.jsonJSON Schema файла tags.json |
| scripts/ | validate.mjsвалидатор, который запускают npm test и CI |
Внутри папки сети:
| Путь | Что это |
|---|---|
| tokenlist.json | токеныформат Uniswap Token Lists; у каждой записи chainId 78270 |
| tags.json | метки адресовключ - адрес контракта с контрольной суммой |
| logos/tokens/ | по одному логотипу на токенимя файла - адрес токена с контрольной суммой |
| logos/tags/ | логотипы проектовна которые ссылаются метки; несколько меток могут делить один файл |
Raw-URL, всегда последний коммит в main:
https://raw.githubusercontent.com/PickleChain/token-list/main/testnet/tokenlist.json https://raw.githubusercontent.com/PickleChain/token-list/main/testnet/tags.json
Логотип токена может быть PNG или SVG, поэтому берите URL из поля logoURI записи (или logo метки), а не собирайте его из адреса.
Для сайта загружайте файлы на сервере и отдавайте их со своего источника, а не ссылайтесь на raw.githubusercontent.com напрямую из браузеров посетителей: так их IP-адреса не уходят третьей стороне, вы не упираетесь в лимиты частоты GitHub и можете держать последнюю исправную копию, когда GitHub недоступен. В кошельке или интерфейсе DEX добавьте raw-URL файла tokenlist.json как пользовательский список токенов.
Как его используют приложения Pickle
API обозревателя - единственная часть стека Pickle, которая обращается к GitHub за этими файлами. Он загружает оба примерно каждые десять минут, проверяет каждый файл целиком - структуру, chain ID, контрольные суммы, дубликаты - и держит последнюю исправную копию в памяти и на диске. Файл, не прошедший проверку, отклоняется полностью, и в работе остаётся предыдущий, так что неудачный коммит никогда не сотрёт подпись или логотип. Каждый сайт Pickle затем читает копию обозревателя со своего собственного источника:
| Маршрут | Отдаёт |
|---|---|
| GET /api/tokenlist | tokenlist.json в последней проверенной версии503, пока не появится первая исправная копия |
| GET /api/tags | tags.json в последней проверенной версии |
| GET /api/tokenlogo/{address} | байты логотипа токена404, если токена нет в списке или у него нет логотипа |
| GET /api/taglogo/{address} | байты логотипа метки |
Маршруты находятся на https://explorer.picklechain.xyz, за списком разрешённых источников CORS обозревателя: они обслуживают сайты Pickle. Ваше собственное приложение читает raw-файлы, указанные выше.
Примерно через десять минут после слияния pull request новая запись появляется во всех приложениях Pickle; с учётом собственного кеша GitHub и кешей сайтов это может занять до двадцати. Логотип, заменённый под тем же именем файла, может обновляться до шести часов, потому что логотипы кешируются по URL.
Добавить токен
Сначала проверьте критерии: pull request для токена, который им не соответствует, закрывается. Затем в своём форке репозитория:
- Получите адрес с контрольной суммой. Смешанный регистр EIP-55, а не все строчные. Если ваш адрес неверен, валидатор выведет ожидаемую форму.
- Добавьте логотип в
testnet/logos/tokens/, назвав его ровно по этому адресу:testnet/logos/tokens/0x0000…dEaD.png(или.svg). Он должен соответствовать правилам для логотипов. - Добавьте запись в конец
tokensвtestnet/tokenlist.json, как в примере ниже. - Поднимите версию
tokenlist.json- добавление токена означает минорное повышение, 1.4.2 становится 1.5.0, - и установитеtimestampна текущий момент в ISO 8601 UTC. - Запустите проверки командой
npm test. Нужен Node 22 или новее и больше ничего: у валидатора нет зависимостей, так что устанавливать нечего. - Откройте pull request в
main. В его описании дайте ссылку на публикацию на собственном сайте проекта или в его официальном аккаунте, где назван адрес контракта.
{
"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 обозначает ваш полный 42-символьный адрес с контрольной суммой; это заполнитель, а не токен.
| Поле | Правило |
|---|---|
| chainId | 78270сеть папки; любое другое значение не проходит |
| address | с контрольной суммой EIP-55уникален в списке |
| name | 1-40 символовто, что приложения показывают рядом с логотипом |
| symbol | 1-20 символов, без пробеловуникален в списке без учёта регистра |
| decimals | целое число 0-255значение, которое возвращает decimals() контракта |
| logoURI | raw-URL в testnet/logos/tokens/файл, названный по адресу, .png или .svg |
| tags | необязательноидентификаторы из верхнеуровневого tags списка, не более 10 |
| extensions | необязательноне более 10 значений, каждое - строка, число, boolean или null |
Весь путь в командной строке:
# 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.
Правила для логотипов
| Правило | Требование |
|---|---|
| Формат | PNG или SVGтип определяется по байтам, а не по расширению |
| Размер PNG | ровно 256 x 256 пикселей |
| Размер файла | не более 100 KB |
| Имя файла | <адрес с контрольной суммой>.png или .svgдля токена; регистр букв на GitHub важен |
| Расположение | та же папка сети, что и у спискасписок testnet может ссылаться только на testnet/logos/ |
| Изображение | квадратное, читаемое при 20 пикселяхпрозрачный или сплошной фон; приложения обычно обрезают его до круга |
SVG должен быть простым рисунком
Никаких <script>, никаких атрибутов-обработчиков событий, никаких <foreignObject>, никаких внешних href или url(), никакого DOCTYPE. Присылайте только изображения, которые принадлежат вам или которые вам разрешено использовать.
На каждый файл в logos/ должен ссылаться список или метки. Логотип, на который ничто не указывает, не проходит проверки, поэтому удаляйте его в том же pull request, что и его запись.
Добавить метку адреса
Метки предназначены для контрактов, с которыми люди сталкиваются в транзакциях: контракты протокола, роутеры, фабрики, пулы, хранилища, игры, мосты. Личные кошельки не помечаются никогда. Проект должен работать в Pickle Chain, а адрес должен проверяться по собственной документации проекта или его файлам развёртывания.
- Добавьте запись в
tagsвtestnet/tags.jsonс адресом с контрольной суммой в качестве ключа. - При желании добавьте логотип в
testnet/logos/tags/- те же правила формата, что и для логотипа токена, любое имя файла - и укажите вlogoего raw-URL. Несколько меток одного проекта могут делить один файл. - Поднимите версию
tags.jsonи егоtimestamp, запуститеnpm testи откройте 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."
}| Поле | Правило |
|---|---|
| name | 1-40 символов, уникально в файлепоказывается вместо адреса, поэтому делайте его коротким и конкретным |
| category | ключ из categoriesсм. список ниже |
| project | 1-40 символовпроект, которому принадлежит контракт |
| url | ссылка https:// или nullобязательно: пишите null, если ссылки нет |
| logo | raw-URL в testnet/logos/tags/ или nullобязательно: пишите null, если логотипа нет |
| note | необязательно, не более 200 символовчто делает контракт, одним предложением |
Категории, определённые на сегодня:
| Ключ | Для чего |
|---|---|
| token | контракт токенаметаданные и логотип находятся в tokenlist.json; метка даёт ему подпись |
| protocol | базовые контрактыкомиссии, стейкинг, сжигание, кран, реестр |
| bridge | мост ETHмежду Pickle Chain и её слоем расчётов |
| dex | контракты биржи Pepperфабрики, роутеры, квотеры и лаунчер токенов |
| pool | пул ликвидности Pepper |
| toolkit | контракты Toolkitmultisend, locker, streams и фабрика развёртывания |
| names | Pickle Name Service |
| oracle | ценовые фиды |
| arcade | банк аркады и её игры |
Если ни одна не подходит, предложите новую категорию в том же pull request: ключ в нижнем регистре длиной до 20 символов, с name и description.
Изменить или удалить запись
- Изменить запись - имя, примечание, сайт, десятичные знаки - можно, отредактировав её на месте и подняв патч-версию. Открывайте pull request от команды токена, как и при добавлении.
- Изменить логотип можно, заменив файл. Переход между PNG и SVG меняет его имя, поэтому обновите
logoURIи удалите старый файл. - Заменить контракт можно, добавив новый адрес. Для метки сохраните старую запись и добавьте к её имени суффикс
(previous), чтобы старые транзакции по-прежнему читались понятно. - Удалить запись можно, удалив её вместе с файлом логотипа и подняв мажорную версию.
Мейнтейнеры могут удалить токен в любой момент - после взлома, rug pull, перехода на новый контракт или вводящего в заблуждение изменения метаданных.
Версии
У каждого файла своя version, и повышение следует правилам Token Lists. CI проверяет его относительно базовой ветки pull request, а изменённая версия требует более нового timestamp.
| Изменение | Повышение |
|---|---|
| Запись удалена | major1.4.2 становится 2.0.0 |
| Запись добавлена | minor1.4.2 становится 1.5.0 |
| Запись изменена | patch1.4.2 становится 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
Что проверяет ревью
Каждый pull request запускает npm test и проверку версии в GitHub Actions, после чего его смотрит мейнтейнер. Токен добавляется, когда выполнены все условия:
- Он развёрнут в сети этой папки, а его исходный код верифицирован или опубликован.
- Pull request открыт или подтверждён командой токена, со ссылкой на публикацию на собственном сайте проекта или в его официальном аккаунте, где назван адрес контракта.
- Его имя и символ не подражают другому токену или проекту. Новый PKL или WETH будет отклонён.
- У него есть реальное применение: ликвидность на Pepper, держатели или работающий продукт, - а не токен, выпущенный несколько минут назад.
- В контракте нет скрытого минта, чёрного списка или переключателя комиссии, о которых команда не сообщила.
Метка добавляется, когда адрес является контрактом, проект работает в Pickle Chain, а адрес можно проверить по собственной документации проекта или его файлам развёртывания.
Частые ошибки валидации
npm test выводит все проблемы, а не только первую. Те, что встречаются чаще всего, и как их исправить:
| Сообщение | Исправление |
|---|---|
| is not EIP-55 checksummed (expected …) | используйте адрес, который выводит сообщение |
| logo file must be named after the checksummed address | переименуйте логотип точно по адресу в смешанном регистре |
| referenced but missing (case matters on GitHub) | имя файла и logoURI различаются, часто только регистром букв |
| PNG is 512x512, it must be 256x256 | измените размер изображения до 256 x 256 |
| … bytes, the limit is 102400 | сожмите его или используйте SVG |
| not referenced by this network's tokenlist.json or tags.json; remove it | удалите оставшийся логотип или исправьте запись, которая на него указывает |
| symbol "EXM" repeats tokens[3] | символ занят; символы уникальны |
| the file changed but version stayed 1.4.2; bump it | поднимите версию - см. «Версии» |
| this change needs a minor version bump | добавление - это minor, удаление - major; patch недостаточно |
| update timestamp when the version changes | установите timestamp на текущее время UTC |
| "logo" is required (use null for url or logo when there is none) | пишите "logo": null или "url": null, а не пропускайте поле |
| category "vault" is not defined in categories | используйте существующий ключ или добавьте категорию в том же pull request |
| SVG must not reference external resources | встройте всё; удалите внешние ссылки href и url() |