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

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

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

`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 기준 아홉 행입니다(전체 응답은 [첫 요청](https://achivx.kr/academy/api/first-request/)에 있습니다). 일곱 개가 `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](https://achivx.kr/academy/issuers/bitgo/)), 솔라나에는 다섯 개([PYUSD](https://achivx.kr/academy/issuers/paxos/), USDC, USDT, …)가 있습니다. `decimals`는 피드 행의 `amount.amount`나 잔액을 숫자로 바꿔 주는 값이며, 같은 체인에서도 토큰마다 다릅니다(USDT는 6, USD1은 18). `variant: "bridged"`는 [래퍼(wrapper)](https://achivx.kr/academy/reference/glossary/#g-wrapper)를 표시합니다(베이스의 DAI). `freeze_tier`는 [동결 권한](https://achivx.kr/academy/api/freeze-powers/)이 설명하는 권한입니다. `chain`이 없으면 목록은 베이스의 것이므로 전달하십시오.

[첫 요청](https://achivx.kr/academy/api/first-request/)의 세 가지 헬퍼로 같은 호출을 하면 다음과 같습니다.

**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)](https://achivx.kr/academy/issuers/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`, 솔라나 [민트](https://achivx.kr/academy/reference/glossary/#g-mint-burn)에서는 `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` 목록은 스테이블코인의 [동결](https://achivx.kr/academy/how-it-works/how-does-a-freeze-happen/) 권한이 코드로 드러나는 곳입니다. `addBlackList(address)`, `destroyBlackFunds(address)`. `max-age=3600`.

## 레지스트리가 정해 주는 것

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

## Stablecoin scanner ACHIVX에서

- 레지스트리: [/v1/networks](https://stablescan.achivx.com/v1/networks), [/v1/tokens?chain=1](https://stablescan.achivx.com/v1/tokens?chain=1), [/v1/tokens?chain=-1](https://stablescan.achivx.com/v1/tokens?chain=-1).
- 페이지의 컨트랙트 기록 — [/ethereum/stablecoin/usdt](https://stablescan.achivx.com/ethereum/stablecoin/usdt)의 *Contract*(컨트랙트) 탭: Sourcify로 검증된 TetherToken.

## 출처

- [REST 인터페이스의 OpenAPI 3.1 명세(API 1.4.0)](https://stablescan.achivx.com/openapi.json)
- [GET /v1/networks (2026-10-24 조회)](https://stablescan.achivx.com/v1/networks)
- [GET /v1/tokens?chain=1 (2026-10-24 조회)](https://stablescan.achivx.com/v1/tokens?chain=1)

## 더 알아보기

- [가이드: 토큰 페이지](https://achivx.kr/academy/guides/token-pages/)
- [레슨: 토큰 페이지](https://achivx.kr/academy/courses/following-the-stablecoins/following-the-stablecoins-03-token-pages/)
- [용어집: 레지스트리](https://achivx.kr/academy/reference/glossary/#g-registry)

## 관련 질문

- [모든 호출이 따르는 규칙은 무엇입니까?](https://achivx.kr/academy/api/the-rules-every-call-follows/)
- [네트워크에서 어떤 스테이블코인을 누가 동결할 수 있습니까?](https://achivx.kr/academy/api/freeze-powers/)
- [사이트 검색창처럼 이름이나 심볼로 검색하려면 어떻게 합니까?](https://achivx.kr/academy/api/search/)

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

---

출처: https://achivx.kr/academy/api/networks-and-tokens/ · 영어 원문: https://achivx.com/academy/api/networks-and-tokens.html
