개발자를 위한 문서 / 토큰

토큰 목록과 주소 태그

어떤 토큰이 인증 마크를 달지, 어떤 로고와 이름을 보여 줄지, 어떤 컨트랙트가 주소 대신 어떤 레이블로 표시될지를 하나의 공개 저장소가 정합니다. 거기에 오르는 방법은 pull request입니다.

목록이란 무엇인가

네트워크마다 파일 두 개입니다. tokenlist.json은 리뷰를 거친 토큰을 표준 Uniswap Token Lists 형식으로 나열하므로, 어떤 지갑, DEX 인터페이스, 애그리게이터든 그대로 가져올 수 있습니다. tags.json은 잘 알려진 컨트랙트에 읽을 수 있는 레이블 - 이름, 카테고리, 프로젝트 - 을 붙여, 익스플로러가 16진수 주소를 보여 줄 자리에 "Pepper 라우터"를 보여 줄 수 있게 합니다.

목록에 오른 토큰은 익스플로러, Pepper, Toolkit, Names, Account 페이지에서 인증 마크와 로고, 이름, 심볼을 얻습니다. 태그가 붙은 컨트랙트는 트랜잭션 목록, 주소 페이지, 검색에서 주소 대신 레이블로 표시됩니다.

마크가 말하는 것과 말하지 않는 것

인증 마크는 그 토큰이 리뷰를 거쳤고 그 컨트랙트 주소가 그 이름에 맞는 주소라는 뜻입니다. 투자 조언도, 보증도, 컨트랙트 감사도 아닙니다.

자동으로 오르는 것은 없습니다. Pepper의 토큰 런처로 출시한 토큰도 존재한다는 이유만으로 추가되지 않습니다. 누군가 pull request를 열고 그것이 기준을 충족할 때 추가됩니다.

어디에 있는가

목록은 공개 GitHub 저장소 github.com/PickleChain/token-list에 있으며, 네트워크마다 폴더가 하나씩 있습니다.

폴더담고 있는 것
testnet/체인 ID 78270지금 Pickle 앱들이 읽는 목록
mainnet/현재는 비어 있음메인넷이 출시되면 메인넷 목록과 태그가 이 폴더에 게시됩니다
schemas/tags.schema.jsontags.json의 JSON Schema
scripts/validate.mjsnpm test와 CI가 실행하는 검증기

네트워크 폴더 안에는 다음이 있습니다.

경로무엇인가
tokenlist.json토큰Uniswap Token Lists 형식이며, 모든 항목의 chainId는 78270입니다
tags.json주소 태그체크섬이 적용된 컨트랙트 주소를 키로 씁니다
logos/tokens/토큰마다 로고 하나토큰의 체크섬 주소를 파일 이름으로 씁니다
logos/tags/프로젝트 로고태그가 가리키는 로고이며, 여러 태그가 하나를 공유할 수 있습니다

raw URL은 다음과 같으며, 항상 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를 읽으십시오. 직접 조립하지 마십시오

토큰 로고는 PNG일 수도 SVG일 수도 있으므로, 주소로 URL을 조립하지 말고 항목의 logoURI(태그라면 logo)에서 URL을 가져오십시오.

웹사이트라면 방문자의 브라우저에서 raw.githubusercontent.com을 직접 링크하지 말고, 서버 쪽에서 파일을 가져와 여러분 자신의 출처에서 제공하십시오. 그러면 방문자의 IP 주소가 제3자에게 가지 않고, GitHub의 요청 한도에 걸리지 않으며, GitHub에 닿을 수 없을 때도 마지막으로 정상이었던 사본을 유지할 수 있습니다. 지갑이나 DEX 인터페이스에서는 tokenlist.json의 raw URL을 사용자 지정 토큰 목록으로 추가하십시오.

Pickle 앱들이 쓰는 방식

Pickle 스택에서 이 파일들을 위해 GitHub와 통신하는 것은 익스플로러 API뿐입니다. 약 10분마다 두 파일을 가져와 각 파일을 통째로 검증하고 - 형태, 체인 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가 머지되고 약 10분 뒤면 새 항목이 모든 Pickle 앱에 나타납니다. GitHub 자신의 캐시와 사이트들의 캐시가 끼어들면 최대 20분까지 걸릴 수 있습니다. 같은 파일 이름으로 교체한 로고는 URL 기준으로 캐시되기 때문에 최대 6시간까지 걸릴 수 있습니다.

토큰 추가하기

먼저 기준을 확인하십시오. 기준을 충족하지 않는 토큰의 pull request는 닫힙니다. 그다음 저장소의 포크에서 다음을 진행합니다.

  1. 체크섬 주소를 확인합니다. EIP-55 대소문자 혼합 형식이며, 전부 소문자가 아닙니다. 틀렸다면 검증기가 기대하는 형식을 출력해 줍니다.
  2. 로고를 추가합니다. testnet/logos/tokens/에 정확히 그 주소를 이름으로 해서 넣습니다: testnet/logos/tokens/0x0000…dEaD.png(또는 .svg). 로고 규칙을 따라야 합니다.
  3. 항목을 추가합니다. 아래 예시처럼 testnet/tokenlist.json의 tokens 끝에 덧붙입니다.
  4. 버전을 올립니다. tokenlist.json의 버전을 올리고 - 토큰 추가는 마이너 버전 올림이라 1.4.2가 1.5.0이 됩니다 - timestamp를 ISO 8601 UTC 형식의 현재 시각으로 설정합니다.
  5. 검사를 실행합니다. npm test로 실행합니다. Node 22 이상만 있으면 되고 다른 것은 필요 없습니다. 검증기에 의존성이 없으므로 설치할 것이 없습니다.
  6. pull request를 엽니다. main을 대상으로 엽니다. 설명에는 컨트랙트 주소를 명시한, 프로젝트 자체 웹사이트나 공식 계정의 게시물 링크를 넣으십시오.
testnet/tokenlist.json - one entry of 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는 여러분의 42자 체크섬 주소 전체를 대신하는 자리 표시자이며, 토큰이 아닙니다.

필드규칙
chainId78270폴더의 네트워크이며, 다른 값은 실패합니다
addressEIP-55 체크섬 적용목록 안에서 고유
name1-40자앱들이 로고 옆에 보여 주는 이름
symbol1-20자, 공백 없음대소문자 구분 없이 목록 안에서 고유
decimals0-255 정수컨트랙트의 decimals()가 반환하는 값
logoURItestnet/logos/tokens/ 안을 가리키는 raw URL주소를 이름으로 한 파일, .png 또는 .svg
tags선택목록 최상위 tags에 정의된 id, 최대 10개
extensions선택최대 10개 값, 각각 문자열, 숫자, 불리언 또는 null

커맨드 라인에서 처음부터 끝까지 하면 이렇습니다.

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.

로고 규칙

규칙요구 사항
형식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에서 운영 중이어야 하고, 주소는 프로젝트 자체 문서나 배포 파일에서 확인할 수 있어야 합니다.

  1. 항목을 추가합니다. testnet/tags.json의 tags에 체크섬 주소를 키로 해서 넣습니다.
  2. 원한다면 로고를 추가합니다. testnet/logos/tags/에 넣고 - 형식 규칙은 토큰 로고와 같으며 파일 이름은 자유입니다 - logo가 그 raw URL을 가리키게 합니다. 한 프로젝트의 여러 태그가 파일 하나를 공유할 수 있습니다.
  3. 버전을 올립니다. tags.json의 버전과 timestamp를 갱신하고, npm test를 실행한 뒤 pull request를 엽니다.
testnet/tags.json - one entry of 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."
}
필드규칙
name1-40자, 파일 안에서 고유주소 대신 표시되므로 짧고 구체적으로
categorycategories의 키 하나아래 목록 참고
project1-40자컨트랙트가 속한 프로젝트
urlhttps:// 링크 또는 null필수: 없으면 null을 쓰십시오
logotestnet/logos/tags/ 안을 가리키는 raw URL 또는 null필수: 없으면 null을 쓰십시오
note선택, 최대 200자컨트랙트가 하는 일을 한 문장으로

현재 정의된 카테고리는 다음과 같습니다.

키용도
token토큰 컨트랙트메타데이터와 로고는 tokenlist.json에 있고, 태그는 레이블을 붙입니다
protocol핵심 컨트랙트수수료, 스테이킹, 소각, Faucet, 레지스트리
bridgeETH 브리지Pickle Chain과 그 정산 레이어 사이
dexPepper 거래소 컨트랙트팩토리, 라우터, 쿼터, 토큰 런처
poolPepper 유동성 풀
toolkitToolkit 컨트랙트멀티센드, 락커, 스트림, 배포 팩토리
namesPickle Name Service
oracle가격 피드
arcade아케이드 뱅크와 그 게임들

맞는 것이 없다면 같은 pull request에서 새 카테고리를 제안하십시오. 최대 20자의 소문자 키에 name과 description을 붙이면 됩니다.

항목 수정 또는 삭제

  • 항목 수정 - 이름, 노트, 웹사이트, decimals - 은 그 자리에서 편집하고 패치 버전을 올립니다. 추가할 때와 마찬가지로 pull request는 토큰 팀이 여십시오.
  • 로고 교체는 파일을 바꿔 넣으면 됩니다. PNG와 SVG 사이를 바꾸면 파일 이름이 달라지므로, logoURI를 갱신하고 이전 파일을 삭제하십시오.
  • 컨트랙트 교체는 새 주소를 추가합니다. 태그라면 이전 항목을 남겨 두고 그 이름 뒤에 (previous)를 붙여, 과거 트랜잭션도 여전히 알아보기 쉽게 하십시오.
  • 항목 삭제는 항목과 그 로고 파일을 지우고 메이저 버전을 올립니다.

메인테이너는 언제든 토큰을 삭제할 수 있습니다 - 익스플로잇, 러그 풀, 새 컨트랙트로의 전환, 오해를 부르는 메타데이터 변경이 있은 뒤라면.

버전

각 파일은 자기 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이 됩니다
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

리뷰가 확인하는 것

모든 pull request는 GitHub Actions에서 npm test와 버전 검사를 실행한 뒤 메인테이너의 리뷰를 받습니다. 토큰은 다음이 모두 성립할 때 추가됩니다.

  • 그 폴더의 네트워크에 배포되어 있고, 소스가 검증되었거나 공개되어 있습니다.
  • 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추가는 마이너, 삭제는 메이저입니다. 패치로는 부족합니다
update timestamp when the version changestimestamp를 현재 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() 참조를 제거하십시오