페이로드에서 정직성 계약 읽기
계약과 루프
- 레슨 3/5
- 12분
- 고급
- 개발자
이번 레슨에서는
레슨을 마치면 다음을 할 수 있습니다.
- 위험 응답에서 incomplete_reasons, chain_source, chains_with_data, freshness_seconds, address_respelled 찾기
- coverage와 freeze_log_backfilled가 있는 freeze[], 그리고 나머지 세 목록 읽기
- no-store 응답과 배치 null 구분하기
빠진 것 없는 판정
아카데미의 제재 대상 예시인 이더리움(Ethereum)의 0x098B71…3E2f96은 2026-10-13에 GET /v1/addresses/{address}/risk?chain=1에 다음과 같이 응답했습니다. tier: "severe", 세 개의 flags(sanctioned, frozen, exposed)가 모두 true, incomplete_reasons: [], 그리고 evidence 행 다섯 개입니다. on the OFAC SDN list(OFAC SDN 목록에 있음, severe), frozen/seized by the PYUSD issuer(PYUSD 발행사가 동결/소각), by the USDC issuer(USDC 발행사가), by the USDT issuer(USDT 발행사가)(각각 high), received funds within reach of an OFAC-sanctioned address(OFAC 제재 대상 주소에서 도달 가능한 범위의 자금을 받음, severe). 판정 옆에는 chain_source: "explicit"(chain을 넘겼음), issuer_acts가 있는 네트워크 네 개를 밝히는 chains_with_data, freshness_seconds 212, data_vintage 2026-09-10T00:00:11Z, sanctions_list_as_of 2026-10-13T04:00:02Z, computed_at, requested_address, address_respelled: false가 있습니다.
다음 순서로 읽으십시오. chain_source — default(베이스(Base)) 또는 address_form은 chain을 넘기지 않았다는 뜻입니다. incomplete_reasons — []는 모든 입력이 평가되었다는 뜻이고, 그 밖의 값은 무엇이 평가되지 않았는지 밝힙니다. 등급이 unknown이면 항상 하나 이상이 나열되며, 사유는 사실이나 라벨이 정한 등급을 결코 낮추지 않습니다. evidence — 행에 자체 tier가 있으면 그것을 읽습니다(signal: "service" 행에는 없을 수 있습니다). tier: "unknown"인 signal: "coverage" 행은 판단 결과가 아니라 공백을 밝힙니다. freshness_seconds — 자신의 허용 기준과 비교합니다. chains_with_data — issuer_acts와 함께 나열된 각 네트워크에 대해 그 chain으로 get-address-compliance를 호출합니다. 중요한 다른 네트워크가 있다면 chain을 지정해 필요한 읽기를 반복합니다.
그 뒤의 사실
컴플라이언스 응답 GET /v1/addresses/{address}?chain=1에는 sanctioned: true와 freeze[] 행 네 개가 있었습니다. 2024-01-03부터 PYUSD frozen, 2022-04-14부터 USDC frozen, 2023-12-09부터 USDT frozen, USD1 clear이며, 모든 행에 coverage: true와 freeze_log_backfilled: true가 있습니다. 행이 없다는 것(그 쌍의 인덱싱된 로그에 동결 조치가 없음)은 freeze_log_backfilled가 있을 때만 clear라는 답이 됩니다. coverage는 이 네트워크에서 발행사의 조치가 애초에 인덱싱된 로그에 들어 있다는 뜻입니다. 설명서는 이렇게 말합니다. 그 진술이 있어야만 행의 부재가 clear로 답할 수 있습니다. 그 진술이 없는 쌍에서는 행의 부재가 unknown으로 답하며, 결코 clear가 아닙니다. not_freezable[]은 DAI, USDS, USDe를 reason: no_freeze_function과 함께 나열했고, frozen_elsewhere[]는 같은 바이트가 동결된 네 행(아비트럼 원(Arbitrum One)의 PYUSD, 베이스·옵티미즘(Optimism)·아비트럼 원의 USDC)을 나열했으며, freeze_proposals: []였습니다. 설명서는 이 응답의 목록 중 세 가지가 비어 있을 때 경고합니다. freeze: [], frozen_elsewhere: [], freeze_proposals: [] 중 어느 것도 깨끗하다는 증명이 아닙니다. 여기서는 freeze_proposals만 비어 있으며, 이것은 게시된 제안 없음이지, 결코 “대기 중인 것 없음”이 아닙니다.
no-store, 그리고 배치 null
일부를 잃은 답(라벨 없는 판정, 읽기가 끝나지 않아 null인 freshness_seconds, "total": null인 피드 페이지, degraded_reason이 있는 /graph)은 REST에서 Cache-Control: no-store로 제공됩니다. A2A 응답에는 캐시 헤더가 없고, MCP 응답은 완전한 판정에도 no-cache, no-transform으로 표시되므로(2026-10-20), 이 접근 경로에서는 본문을 읽으십시오. 모든 접근 경로에서 같은 필드입니다. incomplete_reasons의 labels_unread, null인 chains_with_data, 읽기가 끝나지 않아 null인 freshness_seconds(스키마상 체인에 아직 인덱싱된 전송이 없을 때도 null), 그리고 REST에서 ?from=이 붙은 risk에는 new_counterparty_unread도 있습니다. 피드 진입 페이지에서는 REST든 스킬이든(스킬 응답에도 total이 있음, 2026-10-20) total_unavailable_reason도 있습니다. REST에서는 /graph의 degraded_reason이 있습니다. 어느 경우든 다시 요청하십시오. 다음 답은 완전할 수 있습니다. 솔라나(Solana)의 위험 또는 노출 판정도 호출마다 계산되므로 no-store이지만, 이것은 일부를 잃은 것이 아닙니다. /v1/stats/home이나 /v1/stats/overview의 null 유기적 수치는 배치의 상태이며 organic_unavailable_reason에 밝혀져 있고, organic_excluded_chains는 수치에서 제외된 각 네트워크를 {chain_id, reason}으로 나열합니다(overview에서는 둘 다 최상위, home에서는 둘 다 headline 아래). 다시 요청해도 채워지지 않습니다. 두 가지 null, 두 가지 의미이며, 둘 다 명시되어 있습니다.
핵심 정리
- incomplete_reasons []는 완전히 평가되었다는 뜻이고, 그 밖의 값은 공백을 밝힙니다. unknown은 결코 깨끗함이 아닙니다
- evidence 행에 자체 tier가 있으면 그것을 읽으십시오. tier가 unknown인 coverage 행은 판단 결과가 아니라 공백을 밝힙니다
- 행의 부재가 clear로 답할 수 있게 하는 것은 freeze_log_backfilled입니다. 그것이 없으면 clear는 관측된 동결 해제일 뿐입니다. coverage는 이 네트워크에서 발행사의 조치가 애초에 인덱싱된 로그에 있다는 뜻입니다
- 빈 동결 목록은 깨끗하다는 증명이 아닙니다. frozen_elsewhere는 등급이 점수로 매기지 않는 신호입니다
- EVM이나 트론(Tron) 판정의 no-store는 다시 요청하라는 뜻이고, 배치 null은 가져올 수치가 없다는 뜻입니다
Stablecoin scanner ACHIVX에서 직접 해 보기
- 제재 대상 예시의 위험 판정을 열고
tier,incomplete_reasons,chain_source, 그리고 각evidence행의tier(있는 경우)를 읽습니다. - 그 컴플라이언스 응답을 엽니다.
freeze[]행의 수를 세고, 각status를 읽고,clear인 행의freeze_log_backfilled를 확인합니다. - 같은 응답에서
frozen_elsewhere[]와chains_with_data를 읽습니다. 그다음chain=42161로 컴플라이언스 읽기를 다시 요청하고 비교합니다. - overview를 열고
organic_excluded_chains와, 있다면hot_window_start를 찾습니다.
레슨 돌아보기
- 이 필드 중 데이터 모델에 열이 있는 것은 무엇이고, 조용히 버려질 것은 무엇입니까?
- 사유에
time_budget이 있는 등급unknown을 보고서에서 어떻게 표현하겠습니까?
다음 내용
이 필드들을 이 순서로 읽는 것이 곧 스크리닝 루프입니다. 다음은 설명서의 스크리닝 루프를 처음부터 끝까지 실행하는 것입니다.
더 알아보기
레슨 3/5 · 에이전트를 위한 Stablecoin scanner ACHIVX · 위에 링크된 사용자 가이드를 바탕으로 합니다.
이 페이지는 ACHIVX Academy 영어 원문을 한국어로 옮긴 것입니다. 번역과 원문이 다르면 영어 원문이 기준입니다.