# 주소에 열려 있는 토큰 허용량과 포이즈닝 형태 신호는 어떻게 조회합니까?

주소 · 섀도 휴리스틱으로 구간이 매겨진 디코딩된 Approval 사실과 금액 0 송신 탐지기 — 둘 다 위험 등급을 움직이지 않습니다

*API 가이드 · 6분 · 중급 · 개발자 · GET …/approvals · GET …/heuristics*

`/v1/addresses/{address}/approvals?chain=`은 주소가 열어 둔 스테이블코인 허용량(디코딩된 `Approval` 사실, 클래스 F)을 섀도 방식으로 계산한 행별 위험 `band`, 그리고 목록 전체에 대한 `worst_band`와 함께 나열합니다. `/v1/addresses/{address}/heuristics?chain=`은 주소가 금액 0 전송(zero-value transfer)을 *보냈는지*를 `flagged`, `status`, `zero_value_sends`로 알려 줍니다. 이는 주소 포이즈닝(address poisoning) 캠페인이 가짜 이력을 심을 때 쓰는 형태입니다. 둘 다 참고용입니다. 구간과 플래그는 휴리스틱(클래스 H)이며, 탐지기가 정밀도 기준을 통과하기 전까지는 *위험 점수에 절대 반영되지 않고*, 두 응답 모두 `note`에서 이를 밝힙니다.

## 승인(approval)

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

2026-10-24 기준 바이낸스(Binance) 핫월렛에는 열린 허용량이 없었습니다.

```
{
  "address": "0x28c6c06298d514db089934071355e5743bf21d60",
  "chain_id": 1,
  "open": [],
  "worst_band": "none",
  "note": "Open allowances are decoded Approval facts (Class F, shown plainly). The per-row risk band is a heuristic (Class H) computed in shadow — informational, NOT a risk-tier contribution, until the detector clears the precision gate. A known-service spender (a DEX router) is banded low …",
  "chain_source": "explicit",
  "freshness_seconds": 199
}
```

목록이 비어 있지 않으면 각 `open[]` 행에는 `token`, `spender`(라벨이 있으면 라벨도 표시되며, 알려진 DEX 라우터는 `low`로 [구간이 매겨집니다](https://achivx.kr/academy/reference/glossary/#g-band)), 최소 단위의 `allowance`(무제한 승인은 uint256 최댓값), 승인 시점, 그리고 `band`가 들어 있습니다. `worst_band`는 모든 행 중 가장 높은 구간으로, `none`, `low`, `medium`, `high` 중 하나입니다. [주소 페이지](https://achivx.kr/academy/guides/address-page/)는 같은 목록을 *open approvals · N* 아래에 *computed in shadow — informational, NOT a risk-tier contribution*이라는 문구와 함께 보여 줍니다.

`open: []`의 의미: 이 네트워크에서 인덱싱된 스테이블코인에 대해, `data_vintage` 이후 인덱싱된 로그 범위에서 열린 허용량이 발견되지 않았다는 것입니다. 이것은 목록일 뿐 이상 없음 판정이 아니며, 스캐너가 인덱싱하지 않는 토큰에 대해서는 아무것도 말하지 않습니다.

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

**Python**

```
appr = scan(f"/v1/addresses/{addr}/approvals", chain=1)
print(appr["worst_band"], len(appr["open"]), "open allowances")
for row in appr["open"]:
    print(" ", row["token"], "->", row.get("spender_name") or row["spender"], row["band"])
```

**Go**

```
var appr struct {
	WorstBand string           `json:"worst_band"`
	Open      []map[string]any `json:"open"`
}
if err := get("/v1/addresses/"+addr+"/approvals", url.Values{"chain": {"1"}}, &appr); err != nil {
	return err
}
fmt.Println(appr.WorstBand, len(appr.Open), "open allowances")
```

**TypeScript**

```
type Approvals = { open: Record<string, unknown>[]; worst_band: "none" | "low" | "medium" | "high" };
const appr = await scan<Approvals>(`/v1/addresses/${addr}/approvals`, { chain: 1 });
console.log(appr.worst_band, appr.open.length, "open allowances");
```

## 휴리스틱

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

```
{
  "chain_id": 1,
  "address": "0x28c6c06298d514db089934071355e5743bf21d60",
  "flagged": false,
  "status": "not_flagged",
  "basis": "Our own automated shape detector, pre-false-positive-review. It reports that this address SENT zero-value transfers — the pattern address-poisoning campaigns use to seed fake history. It is not a verified determination, not an accusation, and not an input to any risk tier …",
  "chain_source": "explicit",
  "freshness_seconds": 205
}
```

[경고 표시된](https://achivx.kr/academy/reference/glossary/#g-flagged) 주소에는 `status: "flagged"`, `zero_value_sends`(건수이며, 상한에서 집계가 멈췄다면 `zero_value_sends_capped: true`), `first_seen`, 그리고 열어 볼 수 있는 `sample_tx`가 들어 있습니다. 탐지기는 주소가 *보낸* 것을 봅니다. [금액 0 전송](https://achivx.kr/academy/reference/glossary/#g-zero-value-transfer)을 받기만 하는 포이즈닝 피해자는 이 탐지기에 의해 표시되지 않습니다. `basis`는 한 번 읽어 두십시오. 탐지기 자체의 면책 문구이며, 이 페이지의 입장 전부이기도 합니다. *검증된 판정이 아니고, 혐의 제기가 아니며, 어떤 위험 등급의 입력값도 아닙니다*.

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

**Python**

```
heur = scan(f"/v1/addresses/{addr}/heuristics", chain=1)
if heur["flagged"]:
    print("poisoning shape:", heur["zero_value_sends"], "zero-value sends; sample", heur["sample_tx"])
```

**Go**

```
var heur struct {
	Flagged        bool   `json:"flagged"`
	Status         string `json:"status"`
	ZeroValueSends int    `json:"zero_value_sends"`
	SampleTx       string `json:"sample_tx"`
}
if err := get("/v1/addresses/"+addr+"/heuristics", url.Values{"chain": {"1"}}, &heur); err != nil {
	return err
}
```

**TypeScript**

```
type Heuristics = { flagged: boolean; status: "flagged" | "not_flagged"; zero_value_sends?: number; zero_value_sends_capped?: boolean; sample_tx?: string; first_seen?: string | null };
const heur = await scan<Heuristics>(`/v1/addresses/${addr}/heuristics`, { chain: 1 });
```

## 이 두 가지가 판단에서 차지하는 자리

어느 라우트도 [`/risk`](https://achivx.kr/academy/api/address-risk/)를 바꾸지 않으며, 여러분의 코드도 그렇게 하도록 두어서는 안 됩니다. `high` [구간](https://achivx.kr/academy/reference/glossary/#g-band)이나 `flagged`는 등급이 아니라 살펴볼 이유로 취급해 판정 옆에 보여 주십시오. `/approvals`의 정직한 용도는 주소 소유자(*내가 어떤 허용량을 열어 두었는가?*)와 고객 지원(*오래된 승인을 통한 자금 탈취가 가능한가?*)을 위한 것이고, `/heuristics`의 정직한 용도는 비슷하게 생긴 주소가 왜 이력에 나타났는지 독자에게 설명하는 것입니다.

## Stablecoin scanner ACHIVX에서

- 페이지의 [승인 블록](https://achivx.kr/academy/guides/approvals/) — 제목, 설명 패널, 조회한 네트워크: [/ethereum/address/0x098B…2f96](https://stablescan.achivx.com/ethereum/address/0x098B716B8Aaf21512996dC57EB0615e2383E2f96)(2026-10-24 기준 *open approvals · 0*).
- JSON으로: [/approvals?chain=1](https://stablescan.achivx.com/v1/addresses/0x098B716B8Aaf21512996dC57EB0615e2383E2f96/approvals?chain=1) 및 [/heuristics?chain=1](https://stablescan.achivx.com/v1/addresses/0x098B716B8Aaf21512996dC57EB0615e2383E2f96/heuristics?chain=1).

## 출처

- [REST 인터페이스의 OpenAPI 3.1 명세(API 1.4.0)](https://stablescan.achivx.com/openapi.json)
- [GET /v1/methodology (stablscan-methodology-v0.5.0)](https://stablescan.achivx.com/v1/methodology)
- [에이전트 매뉴얼 — agents.md(버전 2026-10-05)](https://stablescan.achivx.com/agents.md)

## 더 알아보기

- [가이드: 승인](https://achivx.kr/academy/guides/approvals/)
- [get-address-approvals는 무엇을 반환합니까?](https://achivx.kr/academy/for-agents/get-address-approvals/)
- [라벨과 귀속](https://achivx.kr/academy/concepts/labels-and-attribution/)

## 관련 질문

- [주소에 대한 단일 위험 판정은 어떻게 얻고, 언제 unknown이 됩니까?](https://achivx.kr/academy/api/address-risk/)
- [주소가 제재 대상인지, 동결되었는지, 알려진 서비스인지 어떻게 확인합니까?](https://achivx.kr/academy/api/address-overview/)
- [응답은 어떻게 읽습니까: unknown, null, 빈 목록, no-store](https://achivx.kr/academy/api/reading-an-answer/)

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

---

출처: https://achivx.kr/academy/api/address-approvals-and-heuristics/ · 영어 원문: https://achivx.com/academy/api/address-approvals-and-heuristics.html
