주소가 제재 대상인지, 동결되었는지, 알려진 서비스인지 어떻게 확인합니까?

주소 · 컴플라이언스 사실: OFAC 목록 등재, 스테이블코인별 발행사 동결, 다른 곳의 유효한 기록, 라벨

  • API 가이드
  • 9분
  • 중급
  • 개발자
  • GET /v1/addresses/{address}

ACHIVX Academy 원문 (영어) ↗

GET /v1/addresses/{address}?chain=은 사실 요약표입니다. sanctioned(OFAC SDN 목록), 해당 네트워크에서 동결 가능한 스테이블코인마다 status(clear, frozen, seized, unknown)가 있는 freeze[] 행 하나, 어떤 발행사도 건드릴 수 없는 코인을 담은 not_freezable[], 다른 인덱싱된 네트워크의 유효한 기록을 담은 frozen_elsewhere[], freeze_proposals[], 그리고 라벨(is_service, name, name_category)이 들어 있습니다. 이것은 사실일 뿐 신원, AML, 법적 판정이 아니며, 이 사실들로 만든 판정은 /risk입니다.

요청

curl -s 'https://stablescan.achivx.com/v1/addresses/0x098B716B8Aaf21512996dC57EB0615e2383E2f96?chain=1'

2026-10-24, 이더리움(Ethereum)의 제재 대상 예시입니다. 긴 목록은 첫 행들만 남기고 잘랐습니다.

{
  "address": "0x098b716b8aaf21512996dc57eb0615e2383e2f96",
  "chain_id": 1,
  "sanctioned": true,
  "is_service": false,
  "freeze": [
    {"token": "PYUSD", "token_address": "0x6c3e…a0e8", "variant": "native", "own_token_contract": false,
     "status": "frozen", "since_block": 18929201, "since_time": "2024-01-03T20:27:59Z", "last_tx": "0xdbd2…c949",
     "freeze_log_backfilled": true, "coverage": true, "frozen_usd6": 0, "frozen_asof_block": 26258208},
    {"token": "USD1",  "token_address": "0x8d0d…8b0d", "variant": "native", "own_token_contract": false,
     "status": "clear", "freeze_log_backfilled": true, "coverage": true},
    {"token": "USDC",  "status": "frozen", "since_time": "2022-04-14T21:32:53Z", "frozen_usd6": 0, "…": "…"},
    {"token": "USDT",  "…": "…"}
  ],
  "not_freezable": [
    {"token": "DAI",  "token_address": "0x6b17…1d0f", "variant": "native", "reason": "no_freeze_function"},
    {"token": "USDS", "reason": "no_freeze_function"},
    {"token": "USDe", "reason": "no_freeze_function"}
  ],
  "frozen_elsewhere": [
    {"chain_id": 42161, "chain_slug": "arbitrum", "token": "PYUSD", "status": "frozen", "since_time": "2025-07-10T19:02:46Z", "frozen_usd6": 0},
    {"chain_id": 8453,  "chain_slug": "base",     "token": "USDC",  "status": "frozen", "since_time": "2023-08-18T20:19:25Z", "frozen_usd6": 0},
    {"chain_id": 10,    "chain_slug": "optimism", "token": "USDC",  "status": "frozen", "…": "…"}
  ],
  "freeze_proposals": [],
  "data_vintage": "2026-09-10T00:00:11Z",
  "note": "Issuer freeze/seize and OFAC listing are decoded on-chain facts cited with their source; heuristic signals are not included here. Not an identity, AML, or legal determination.",
  "chain_source": "explicit",
  "chains_with_data": [{"chain_id": 1, "kinds": ["issuer_acts"]}, {"chain_id": 10, "kinds": ["issuer_acts"]}, {"chain_id": 8453, "kinds": ["issuer_acts"]}, {"chain_id": 42161, "kinds": ["issuer_acts"]}],
  "freshness_seconds": 199,
  "requested_address": "0x098B716B8Aaf21512996dC57EB0615e2383E2f96",
  "address_respelled": false
}

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

Python

facts = scan(f"/v1/addresses/{addr}", chain=1)
if facts["sanctioned"] or any(r["status"] in ("frozen", "seized") for r in facts["freeze"]):
    print("do not transact:", facts["requested_address"])

Go

var facts struct {
	Sanctioned bool `json:"sanctioned"`
	Freeze     []struct {
		Token  string `json:"token"`
		Status string `json:"status"`
	} `json:"freeze"`
}
if err := get("/v1/addresses/"+addr, url.Values{"chain": {"1"}}, &facts); err != nil {
	return err
}
for _, row := range facts.Freeze {
	if row.Status == "frozen" || row.Status == "seized" {
		fmt.Println("frozen by the", row.Token, "issuer")
	}
}

TypeScript

type Overview = { sanctioned: boolean; freeze: { token: string; status: "clear" | "frozen" | "seized" | "unknown" }[] };
const facts = await scan<Overview>(`/v1/addresses/${addr}`, { chain: 1 });
const frozen = facts.freeze.filter((r) => r.status === "frozen" || r.status === "seized").map((r) => r.token);
if (facts.sanctioned || frozen.length) console.log("do not transact", { sanctioned: facts.sanctioned, frozen });

필드별 설명

sanctioned — 주소가 스캐너가 로드하는 OFAC SDN 디지털 통화 목록에 올라 있다는 뜻입니다(/v1/sanctions가 마지막 갱신 시각을 알려 주며, 2026-10-24 기준 매일 04:00 UTC입니다). 출처를 밝힌 사실이며, note는 이것이 법적 판정이 아니라고 말합니다.

freeze[] — 이 네트워크에서 컨트랙트가 동결할 수 있는 스테이블코인마다 행이 하나 있으며, 중요한 필드는 네 가지입니다.

  • status는 그 쌍에 대한 판정입니다. frozen과 seized는 관측된 기록이며 플래그가 무엇이든 유효합니다. clear는 발행사 로그를 토큰의 첫 블록까지 거슬러 읽었을 때만 주장됩니다. 그 외에는 unknown입니다.
  • freeze_log_backfilled가 바로 그 진술입니다. 인덱서가 이 쌍의 로그를 토큰의 첫 블록까지 읽었다는 뜻입니다. coverage는 이 네트워크의 발행사 기록이 인덱싱된 로그에 아예 들어 있는지를 알려 줍니다. 행이 없다는 사실로 clear를 답할 수 있는 것은 백필된 쌍뿐이며, 그렇지 않은 쌍은 절대 clear가 아니라 unknown을 답합니다.
  • since_block, since_time, last_tx는 기록을 가리킵니다. frozen_usd6는 그 기록으로 묶인 잔액이며(여기서는 0입니다. 주소에 PYUSD나 USDC가 없습니다), frozen_asof_block에서 읽은 값입니다.
  • own_token_contract: true는 주소가 토큰 컨트랙트 자체인 행을 표시합니다. 트론(Tron) USDT 컨트랙트는 자기 자신의 쌍에서 frozen_usd6: 9610432043160(파기된 동결 자금 960만 달러)과 함께 status: "seized"를 답하며, 이 행은 컨트랙트가 나쁜 거래 상대라는 뜻이 아닙니다.

not_freezable[] — 이 네트워크에서 어떤 발행사도 동결할 수 없는 코인과 그 reason(no_freeze_function; 솔라나(Solana)에서는 동결 권한(freeze authority)이 없는 민트)입니다. 이들은 판정이 있는 쌍이 결코 아닙니다. clear도 unknown도 아닙니다.

frozen_elsewhere[] — 다른 인덱싱된 네트워크의 유효한 기록이며, 각각 chain_slug, token, status, since_time, frozen_usd6가 있습니다. 제재 대상 예시는 아비트럼(Arbitrum), 베이스(Base), 옵티미즘(Optimism)에서도 동결되어 있습니다. []는 이 스캐너가 인덱싱하는 범위 안에서 다른 곳에 유효한 기록이 없다는 뜻이지(솔라나 기록은 수집되지 않습니다), 모든 곳에서 깨끗하다는 뜻이 아닙니다.

freeze_proposals[] — 발행사 소유자 멀티시그에 올라 이 주소를 지목하고 있지만 아직 실행되지 않은 제안입니다. []는 공개된 제안이 없다는 뜻입니다. 대기 중인 제안을 공개할지 여부 자체가 배포 설정이므로, 절대 대기 중인 것이 없음으로 읽지 마십시오. 목록은 제안 페이지에 있습니다.

is_service, service_category, name, name_category — 라벨입니다. 바이낸스(Binance) 핫월렛은 "is_service": true, "service_category": "exchange_hot", "name": "Binance"를 답했습니다. 라벨은 출처 기록이 있는 커뮤니티 귀속이지 신원이 아니며, 라벨 집계 범위는 체인마다 고르지 않습니다. 같은 주체가 이더리움에서는 이름이 붙어 있고 BNB 체인(BNB Chain)에서는 새로 만든 익명 지갑처럼 보일 수 있습니다.

chains_with_data[] — 비용이 적은 존재 확인입니다. 주소에 무엇이든 있는 모든 인덱싱된 네트워크를 transfers, labels, issuer_acts 중의 kinds와 함께 나열합니다. 제재 대상 예시는 네 개 네트워크에 issuer_acts가 있고 어디에도 전송은 없습니다. []는 어떤 인덱싱된 네트워크에도 아무것도 없다는 뜻입니다. 판정은 아니지만, 어떤 chain 값으로 물어볼 가치가 있는지 아는 가장 저렴한 방법입니다.

data_vintage — 이 네트워크의 관측된 이력이 시작되는 지점입니다(이더리움에서는 2026-09-10T00:00:11Z). 전송이 없다는 사실은 이 시점 이후에 대해서만 의미가 있습니다. 최신성이 아닙니다. 최신성은 freshness_seconds로, 응답이 제공된 시점에 이 네트워크에서 가장 최근에 인덱싱된 전송의 경과 시간(199초)입니다.

다른 것을 읽어야 할 때

  • 거래해도 되는가? — /risk가 이 사실들을 점수화합니다(이 체인의 freeze[] 상태만 반영하며, frozen_elsewhere, 제안, 묶인 잔액은 등급에 들어가지 않습니다).
  • 스테이블코인이 나쁜 곳에서 왔을 수 있는가? — /exposure. 여기의 sanctioned: false는 그에 대해 아무것도 말하지 않습니다.
  • 동결 상태는 확정성을 따릅니다. 이 행들은 기록이 확정되어야 바뀝니다. 기록 원장은 finality: pending과 함께 더 일찍 보여 줍니다.

이런 것이 보이면 …

  • "address_respelled": true — 주소 표기와 다른 종류의 네트워크에 대해 물었습니다. 응답은 같은 바이트를 그 네트워크의 표기(address)로 나타낸 것에 대한 것이며, 일반 키 계정인 경우에만 소유자가 같습니다. requested_address를 확인한 다음, 주소가 속한 체인으로 다시 물어보십시오.
  • "chain_source": "default" — chain을 빠뜨렸습니다. 이것은 베이스입니다. 규칙을 참조하십시오.
  • "freshness_seconds": null — 최신성 조회가 끝나지 않았습니다. 응답은 no-store이므로 다시 요청하십시오.
  • "coverage_status": "pending" 또는 "partial"(솔라나만 해당) — 주소의 이력을 채우는 중이며, 이 조회가 채움을 요청합니다. 응답이 늘어날 수 있으니 나중에 다시 요청하십시오.

Stablecoin scanner ACHIVX에서

출처

더 알아보기

주소 · GET /v1/addresses/{address} · 2026-10-24 작성, openapi.json, agents.md 및 당일 실제 호출 기준. 응답 형태는 인용이며, 수치는 날짜 기준이고 인덱스에 따라 달라집니다.

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