# 스크리닝 루프 처음부터 끝까지

계약과 루프

*레슨 4/5 · 12분 · 고급 · 개발자*

## 이번 레슨에서는

레슨을 마치면 다음을 할 수 있습니다.

- 설명서 §5의 루프를 단계별로 실행하기
- 허브 규모 주소에서 time_budget 중단을 읽고, 그것이 무엇이 아닌지 알기
- 전송이 이 영역에서 인덱싱되었는지 확인하고, ‘아직 인덱싱 안 됨’을 ‘일어나지 않음’과 구분해 읽기

## 설명서 §5의 루프

설명서에 적힌 그대로의 호출 여섯 개입니다. 설명서의 긴 주석 두 개(트레저리에 관한 것과 다른 호스트의 결제 확인에 관한 것)는 여기서 생략했으며, 트레저리에 관한 내용은 아래에서 읽습니다.

```
# Payloads are complete JSON-RPC 2.0 — the envelope is required, the server
# rejects a bare {"method":…} with -32600.
# 1. vet the counterparty before you accept or send funds
POST /a2a {"jsonrpc":"2.0","id":1,"method":"get-address-risk",
           "params":{"chain":1,"address":"0x5754284f345afc66a98fbb0a0afe71e0f007b949"}}
POST /a2a {"jsonrpc":"2.0","id":2,"method":"get-address-compliance",
           "params":{"chain":1,"address":"0x5754284f345afc66a98fbb0a0afe71e0f007b949"}}
# 2. if risk warrants, look deeper (pass token explicitly — see §2)
POST /a2a {"jsonrpc":"2.0","id":3,"method":"get-address-exposure",
           "params":{"chain":1,"address":"0x…"}}
POST /a2a {"jsonrpc":"2.0","id":4,"method":"get-wallet-graph-walk",
           "params":{"chain":1,"token":"USDT","address":"0x…","hops":2}}
# 3. after the transfer, confirm it indexed on THIS surface
POST /a2a {"jsonrpc":"2.0","id":5,"method":"get-recent-transactions",
           "params":{"chain":8453,"recipient":"0x…"}}
POST /a2a {"jsonrpc":"2.0","id":6,"method":"get-sync-status","params":{"chain":8453}}
```

## 허브에서의 1단계

설명서는 1단계에 일부러 [테더(Tether)](https://achivx.kr/academy/issuers/tether/)의 트레저리를 골랐습니다. *허브 규모의 주소이므로, 답이 고정된 등급이 아니라 §4가 작동하는 모습을 보여 줍니다*. 이 주소의 [노출 탐색](https://achivx.kr/academy/courses/reading-an-address/reading-an-address-04-the-exposure-card/)은 시간 예산을 다 쓸 수 있습니다. 그러면 등급은 `incomplete_reasons`에 `time_budget`이 있고 `signal: "coverage"`인 `evidence` 행이 있는 `unknown`이 될 수 있으며, 노출 읽기에는 [탐색](https://achivx.kr/academy/reference/glossary/#g-walk)의 `truncation_reason`과 `hops_completed`가 담깁니다. *그 옆의 서비스 플래그는 맥락 정보이며 등급을 결코 움직이지 않습니다.* 이런 중단 뒤에는 판정이 `computed_at`을 포함해 약 10초 동안 재사용되고, 그렇지 않으면 60초 동안 재사용됩니다. 이것이 아닌 것: 트레저리에 대한 판단 결과가 아니며, 반복할 이유도 아닙니다. *반복 사이에는 간격을 두십시오*.

## 필요할 때만 2단계

설명서의 2단계는 노출, 그다음 [탐색](https://achivx.kr/academy/reference/glossary/#g-walk)입니다. 스크리닝 스킬은 자체 4단계(노출과 승인)를 *등급이나 사실이 필요로 할 때*로 제한합니다. 탐색에는 `token`을 지정해야 합니다(REST에서 `token`이 없으면 네트워크의 기본 스테이블코인으로 대체되며, `token_source: "default"`로 그렇다고 밝힙니다). 깊이에 관한 그래프 탐색 스킬의 규칙: *2홉에서 시작하십시오. 질문이 필요로 할 때만 더 깊이 가십시오.* 컴플라이언스 응답의 `chains_with_data`는 다른 어느 네트워크에 물어야 하는지 알려 주며, `issuer_acts`와 함께 나열된 것부터 물어야 합니다.

## 3단계: 도착했습니까?

수취인에 대해 `get-recent-transactions`, 그다음 같은 체인에 대해 `get-sync-status`를 호출합니다. 정산 스킬의 규칙: *`items`가 비어 있고 `freshness_seconds`가 크면 “아직 인덱싱 안 됨”이지, “일어나지 않음”이 아닙니다*. `pending` 행은 아직 [재구성(reorg)](https://achivx.kr/academy/reference/glossary/#g-reorg)될 수 있습니다. 행의 금액은 최소 단위로 된 `amount.amount`이고, `amount.decimals`가 자릿수를 알려 줍니다(피드 행에는 `*_usd6`가 없음, 2026-10-20). 달러 금액은 가격이 매겨진 경우 `usd_amount`이고, 그렇지 않으면 없거나 `null`입니다. 그리고 설명서의 마지막 말: *하려던 일을 마쳤으면 멈추십시오.*

## 핵심 정리

- 호출 여섯 개, 단계 세 개. 모든 호출에 봉투가 필수입니다
- 허브에서의 time_budget 중단은 계약이 작동하는 모습입니다. 10초 동안 재사용되며, 결코 판단 결과가 아니고, 반복할 이유도 아닙니다
- 등급이나 사실이 필요로 할 때만 더 깊이 보며, 탐색에는 token을 지정합니다
- 수취인의 피드와 체인의 최신성으로 전송을 확인하고, ‘아직 인덱싱 안 됨’을 올바르게 읽습니다
- 그다음 멈추십시오. 이 영역에는 접속 상태라는 개념이 없습니다

## Stablecoin scanner ACHIVX에서 직접 해 보기

1. 루프의 호출 1을 적힌 그대로 POST하고 `tier`, `incomplete_reasons`, `evidence` 행을 읽습니다. `time_budget`이 있다면 `computed_at`을 읽고 10초 동안 반복하지 마십시오.
2. 호출 2를 POST하고 트레저리의 `freeze[]`, `not_freezable[]`, `chains_with_data`를 읽습니다.
3. 같은 두 읽기를 REST로 실행하고([위험](https://stablescan.achivx.com/v1/addresses/0x5754284f345afc66a98fbb0a0afe71e0f007b949/risk?chain=1), [컴플라이언스](https://stablescan.achivx.com/v1/addresses/0x5754284f345afc66a98fbb0a0afe71e0f007b949?chain=1)), 위험 읽기의 `Cache-Control`을 설명서가 중단에 대해 말하는 내용과 비교합니다(60 대신 `max-age=10` — 설명서는 이에 대해 `/risk`와 `/exposure`를 명시합니다. 컴플라이언스 읽기는 2026-10-20에 `max-age=60`으로 응답했습니다).
4. [베이스 피드](https://stablescan.achivx.com/v1/transfers?chain=8453&limit=5)에서 아무 `recipient`나 가져와 호출 5를 POST하고, 그다음 호출 6을 POST해 `freshness_seconds`를 읽습니다.

## 레슨 돌아보기

- time_budget 중단 뒤의 10초 규칙을 파이프라인의 어디에 두겠습니까?
- 호출 5가 빈 items로, 호출 6이 작은 freshness_seconds로 응답하면 통합 시스템은 무엇을 기록합니까?

## 다음 내용

가장 깊은 읽기는 탐색입니다. 마지막으로 그래프 탐색과 그 범위, 그리고 한도 안에서 모든 읽기의 속도를 조절하는 방법을 다룹니다.

## 함께 보기

- 레슨: [노출 카드를 한 줄씩 · 주소 읽기](https://achivx.kr/academy/courses/reading-an-address/reading-an-address-04-the-exposure-card/)
- 가이드: [용어집](https://achivx.kr/academy/reference/glossary/)

## 더 알아보기

- [사람이 개입하지 않는 전형적인 루프는 무엇입니까?](https://achivx.kr/academy/for-agents/the-typical-loop-with-no-human/)
- [세 가지 에이전트 스킬은 무엇이며, 어떻게 설치합니까?](https://achivx.kr/academy/for-agents/what-are-the-agent-skills/)
- [get-address-exposure는 무엇을 반환합니까?](https://achivx.kr/academy/for-agents/get-address-exposure/)

레슨 4/5 · 에이전트를 위한 Stablecoin scanner ACHIVX · 위에 링크된 사용자 가이드를 바탕으로 합니다.

---

출처: https://achivx.kr/academy/courses/the-scanner-for-agents/the-scanner-for-agents-04-the-screening-loop/ · 영어 원문: https://achivx.com/academy/courses/the-scanner-for-agents/the-scanner-for-agents-04-the-screening-loop.html
