API가 아는 네트워크와 스테이블코인은 무엇이며, 이 컨트랙트는 검증되었습니까?

레지스트리, 검색, 시장 데이터 · 다른 모든 호출이 ID를 가져오는 두 레지스트리, 그리고 토큰 컨트랙트의 검증된 소스 코드 기록

  • API 가이드
  • 6분
  • 입문
  • 개발자
  • GET /v1/networks
  • /v1/tokens
  • /v1/tokens/{address}/contract

ACHIVX Academy 원문 (영어) ↗

GET /v1/networks는 스캐너가 아는 모든 네트워크를 chain_id, slug, caip2, settled(true = 여기서 인덱싱됨)와 함께 나열합니다. GET /v1/tokens?chain=은 네트워크 하나의 스테이블코인을 symbol, address, decimals, variant(native 또는 bridged), freeze_tier와 함께 나열합니다. GET /v1/tokens/{address}/contract?chain=은 검증된 소스 코드 기록을 답합니다. verified, source(sourcify, tronscan, tron_onchain, registry), ABI, 읽기 및 쓰기 함수, 배포 정보입니다. 앞의 두 가지는 5분 동안 캐시하고, 모든 chain, token, decimals를 거기서 가져오십시오.

네트워크

curl -s https://stablescan.achivx.com/v1/networks

2026-10-24 기준 아홉 행입니다(전체 응답은 첫 요청에 있습니다). 일곱 개가 settled: true — 솔라나(Solana)(-1), 이더리움(Ethereum)(1), 옵티미즘(Optimism)(10), BNB 체인(BNB Chain)(56), 베이스(Base)(8453), 아비트럼 원(Arbitrum One)(42161), 트론(Tron)(728126428) — 이고, 두 개는 알려져 있지만 인덱싱되지 않는 폴리곤(Polygon)(137)과 아발란체(Avalanche)(43114)입니다. caip2는 체인 중립적인 ID(eip155:1, solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp)이고, slug는 사이트 URL이 쓰는 단어(/ethereum/address/…)입니다. max-age=300이며, stale-while-revalidate와 stale-if-error가 함께 붙습니다.

토큰

curl -s 'https://stablescan.achivx.com/v1/tokens?chain=1'
{
  "chain_id": 1,
  "items": [
    {"symbol": "DAI",   "address": "0x6b175474e89094c44da98b954eedeac495271d0f", "decimals": 18, "variant": "native", "freeze_tier": "none"},
    {"symbol": "PYUSD", "address": "0x6c3ea9036406852006290770bedfcaba0e23a0e8", "decimals": 6,  "variant": "native", "freeze_tier": "seize"},
    {"symbol": "USD1",  "address": "0x8d0d000ee44948fc98c9b98a4fa4921476f08b0d", "decimals": 18, "variant": "native", "freeze_tier": "seize"},
    {"symbol": "USDC",  "address": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", "decimals": 6,  "variant": "native", "freeze_tier": "freeze"},
    {"symbol": "USDS",  "address": "0xdc035d45d973e3ec169d2276ddab16f1e407384f", "decimals": 18, "variant": "native", "freeze_tier": "none"},
    {"symbol": "USDT",  "address": "0xdac17f958d2ee523a2206206994597c13d831ec7", "decimals": 6,  "variant": "native", "freeze_tier": "seize"},
    {"symbol": "USDe",  "address": "0x4c9edd5852cd905f086c759e8383e09bff1e68b3", "decimals": 18, "variant": "native", "freeze_tier": "none"}
  ]
}

이더리움에는 일곱 개, 트론에는 두 개(소수점 6자리에 seize인 USDT, 18자리에 freeze인 USD1), 솔라나에는 다섯 개(PYUSD, USDC, USDT, …)가 있습니다. decimals는 피드 행의 amount.amount나 잔액을 숫자로 바꿔 주는 값이며, 같은 체인에서도 토큰마다 다릅니다(USDT는 6, USD1은 18). variant: "bridged"는 래퍼(wrapper)를 표시합니다(베이스의 DAI). freeze_tier는 동결 권한이 설명하는 권한입니다. chain이 없으면 목록은 베이스의 것이므로 전달하십시오.

첫 요청의 세 가지 헬퍼로 같은 호출을 하면 다음과 같습니다.

Python

tokens = {t["symbol"]: t for t in scan("/v1/tokens", chain=1)["items"]}
def to_units(symbol, human):              # 1,000 USDT -> "1000000000"
    return str(int(round(human * 10 ** tokens[symbol]["decimals"])))
def to_human(symbol, minor):              # "1047600000" USDC -> 1047.6
    return int(minor) / 10 ** tokens[symbol]["decimals"]

Go

var reg struct {
	Items []struct {
		Symbol     string `json:"symbol"`
		Address    string `json:"address"`
		Decimals   int    `json:"decimals"`
		Variant    string `json:"variant"`
		FreezeTier string `json:"freeze_tier"`
	} `json:"items"`
}
if err := get("/v1/tokens", url.Values{"chain": {"1"}}, &reg); err != nil {
	return err
}
decimals := map[string]int{}
for _, t := range reg.Items {
	decimals[t.Symbol] = t.Decimals
}

TypeScript

type Token = { symbol: string; address: string; decimals: number; variant: "native" | "bridged"; freeze_tier: "none" | "freeze" | "seize" };
const tokens = new Map((await scan<{ items: Token[] }>("/v1/tokens", { chain: 1 })).items.map((t) => [t.symbol, t]));
const toHuman = (symbol: string, minor: string) => Number(BigInt(minor)) / 10 ** tokens.get(symbol)!.decimals;

컨트랙트 기록

curl -s 'https://stablescan.achivx.com/v1/tokens/0xdac17f958d2ee523a2206206994597c13d831ec7/contract?chain=1'

테더(Tether)의 이더리움 컨트랙트이며, 뼈대만 남기고 잘랐습니다.

{
  "match": "match",
  "source": "sourcify",
  "symbol": "USDT",
  "address": "0xdac17f958d2ee523a2206206994597c13d831ec7",
  "chain_id": 1,
  "verified": true,
  "verified_at": "2024-08-08T13:56:23Z",
  "contract": {"name": "TetherToken", "language": "Solidity", "compiler_version": "0.4.18+commit.9cf6e910", "abi": ["… 45 entries"], "sources": [{"name": "TetherToken.sol", "content": "pragma solidity ^0.4.17; …"}]},
  "functions": {
    "read":  [{"name": "MAX_UINT", "signature": "MAX_UINT()", "state_mutability": "view"}, "… 18 more"],
    "write": [{"name": "addBlackList", "inputs": [{"name": "_evilUser", "type": "address"}], "signature": "addBlackList(address)", "state_mutability": "nonpayable"}, "… 12 more"]
  },
  "deployment": {"tx_hash": "0x2f1c5c2b…9190", "deployer": "0x36928500Bc1dCd7af6a2B4008875CC336b927D57", "block_number": 4634748}
}

source는 누가 검증했는지를 밝힙니다. EVM 네트워크에서는 sourcify, 트론에서는 tronscan, 솔라나 민트에서는 registry입니다. 아무도 검증하지 않았다면 응답이 그렇게 밝히고, 그래도 체인 자체의 기록은 제공합니다. 트론 USDT 컨트랙트는 No verified source on Sourcify for this contract — the name and ABI below are the chain’s own record (wallet/getcontract), not a verification.이라는 note와 함께 "verified": false, "source": "tron_onchain"을 답했습니다. functions.write 목록은 스테이블코인의 동결 권한이 코드로 드러나는 곳입니다. addBlackList(address), destroyBlackFunds(address). max-age=3600.

레지스트리가 정해 주는 것

모든 체인 범위 호출은 chain을 /v1/networks에서 가져오고, 모든 token= 필터와 모든 decimals는 /v1/tokens에서 옵니다. 체인의 레지스트리에 없는 token은 400 bad_request — token “USDC” is not indexed on chain 728126428 — 이고, settled: false인 체인은 400 invalid_chain입니다. 시작할 때 둘을 한 번 읽어 max-age 동안 캐시하면, API의 나머지 부분에는 하드코딩된 숫자가 필요 없습니다.

Stablecoin scanner ACHIVX에서

출처

더 알아보기

레지스트리, 검색, 시장 데이터 · GET /v1/networks · /v1/tokens · /v1/tokens/{address}/contract · 2026-10-24 작성, openapi.json, agents.md 및 당일 실제 호출 기준. 응답 형태는 인용이며, 수치는 날짜 기준이고 인덱스에 따라 달라집니다.

이 페이지는 ACHIVX Academy 영어 원문을 한국어로 옮긴 것입니다. 번역과 원문이 다르면 영어 원문이 기준입니다.