지갑 포렌식
블록체인 주소를 분석하여 실제 보유 자산, 손실, 그리고 여전히 위험에 노출된 부분을 보고합니다.
사용 시기
다음과 같은 요청에서 실행하세요:
- "이 지갑 분석해줘: 0x…" / "이 주소에 뭐가 있어?"
- "가스비로 얼마나 썼지?"
- "내가 샌드위치 공격을 당했나?" / "MEV로 얼마나 손해봤어?" (EVM 체인)
- "내 승인 중에 위험한 게 있나?" / "뭘 철회해야 하지?"
- "이 토큰을 실제로 팔 수 있어?" / "이 포지션 청산 가능해?"
- "이 지갑의 PnL은 얼마야?"
- 아무 질문과 함께 붙여넣은 주소
핵심 인사이트
모든 포트폴리오 트래커는 잔액 × 현재가를 계산하여 순자산이라고 부릅니다. 하지만 상위 수백 개 토큰을 제외하면 이 숫자는 허구입니다. 현재가는 마지막 거래 가격에서 비롯되는데, 그 거래가 3,000달러 풀에서 40달러에 이루어졌을 수도 있습니다. 그 풀에 "$50,000" 포지션을 매도한다고 50,000달러가 생기지 않습니다.
이 스킬은 실제 매도 시 경로 견적을 내고 그 차이를 보고합니다. 그 차이가 보통 보고서에서 가장 중요한 정보입니다. 이걸 먼저 제시하세요.
실행 방법
node scripts/forensics.mjs <address> [options]
Node 20+ 필요. 의존성 없음, 설치 단계 없음.
| 옵션 | 효과 |
|---|---|
--chain <list> | 쉼표로 구분: ethereum,base,arbitrum,optimism,polygon,solana. 0x… 주소는 ethereum, base58 주소는 solana 기본값 |
--all-evm | 지원되는 모든 EVM 체인 분석 |
--text | JSON 대신 사람이 읽을 수 있는 요약 |
--max <n> | 가져올 트랜잭션 수 제한 (기본 2000) |
--no-mev | 샌드위치 탐지 건너뛰기 – 훨씬 빠름 |
--no-liquidity | 출구 유동성 경로 견적 건너뛰기 |
기본적으로 출력은 JSON (stdout). 이를 읽고 자연어로 설명하세요. 원시 JSON을 사용자에게 그대로 덤프하지 마세요.
환경 변수
모든 항목에는 공개 기본값이 있습니다. 두 가지 선택적 변수가 결과를 의미 있게 개선합니다:
ETHERSCAN_API_KEY— 선택 사항. 없으면 EVM 기록은 Blockscout에서 가져오며, 키가 필요 없고 대부분의 체인에서 전체 기록을 반환합니다. 있으면 Etherscan에서 기록을 가져오며, 더 완전하고 신뢰할 수 있습니다. 하나의 키가 모든 EVM 체인을 처리하며(V2 API 통합), 무료 티어로 충분합니다. Base의 Blockscout 인스턴스는 현재 불안정하므로 키가 가장 중요한 곳입니다.SOLANA_RPC_URL— 공개 엔드포인트는 요금 제한이 심하고 활성 지갑에서는 느리거나 실패할 수 있습니다. Helius/Triton/QuickNode URL로 해결됩니다.COINGECKO_API_KEY— 선택 사항, 가격 요청 속도 제한을 높입니다.
경고는 중요합니다. 실행이 부분적으로 성공할 수 있습니다 — --max로 기록이 잘렸거나, 토큰 잔액이 속도 제한으로 손실되었거나, 무한 로그 쿼리를 거부하는 RPC로 인해 승인 스캔이 저하되었을 수 있습니다. 각각은 warnings에 보고되며, 각 경고는 주요 숫자를 총합이 아닌 하한선으로 만듭니다. 어떤 수치를 완전하다고 제시하기 전에 먼저 읽으세요.
출력 해석
JSON은 다음과 같은 구조입니다:
{
"chains": [{ "chain", "activity", "fees", "positions", "approvals", "mev", "liquidity", "regrets", "warnings" }],
"totals": { "realizedPnlUsd", "unrealizedPnlUsd", "feesUsd", "mevExtractedUsd",
"portfolioNominalUsd", "portfolioRealizableUsd" },
"topRegrets": [{ "kind", "title", "detail", "costUsd" }]
}
topRegrets로 시작하세요. 이미 모든 범주에 걸쳐 달러 손실 기준으로 정렬되어 있으며, 사용자가 실제로 알고 싶어하는 내용입니다.
핵심 숫자는 portfolioNominalUsd와 portfolioRealizableUsd입니다. 둘의 차이가 몇 퍼센트 이상 벌어지면 그 차이가 핵심입니다: "트래커에는 $84,000라고 나오는데, 실제로는 약 $31,000만 현금화할 수 있습니다."
먼저 warnings를 확인하세요. 어떤 숫자가 신뢰할 수 있는지 알려줍니다. "기록 잘림"은 지갑 사용 기간과 평생 수수료가 하한선임을 의미합니다. "토큰 잔액 사용 불가"는 포트폴리오 총액이 하한선임을 의미합니다. "승인 스캔 저하"는 빈 승인 목록이 아무것도 증명하지 않음을 의미합니다.
승인은 critical / high / medium / low로 현재 바로 빼앗길 수 있는 금액(허용 한도와 현재 잔액 중 작은 값)을 기준으로 순위가 매겨집니다. 빈 지갑에 대한 무제한 승인은 긴급하지 않지만, 같은 승인이 메인 자산에 있다면 긴급합니다.
MEV 이벤트에는 high / medium / low의 confidence 필드가 있습니다. 이를 보고하세요. 신뢰도가 low인 샌드위치는 추측일 뿐 사실이 아닙니다.
샌드위치 탐지는 EVM 전용이며 전체 블록을 읽습니다. 공개 RPC는 종종 이를 거부합니다. warnings에 블록을 읽을 수 없다고 나오면 빈 MEV 목록은 확인되지 않음을 의미하지 샌드위치 당하지 않음을 의미하지 않습니다. 후자로 보고하지 마세요.
책임 있는 해석
- 비용 기준은 추정치이며 공식적이지 않습니다. 가치는 각 거래의 스테이블코인 또는 네이티브 자산 레그에서 파생됩니다. 둘 다 없는 거래는
warnings에 포함되며 PnL에서 제외됩니다. 이 숫자를 세금 준비 완료로 제시하지 마세요. - 출구 유동성은 특정 시점의 견적입니다. 시장에 따라 변동하며 CEX 유동성을 완전히 무시합니다. 토큰이 온체인에서는 유동성이 낮아 보여도 바이낸스에서는 완벽하게 매도 가능할 수 있습니다.
- 증거가 없다고 부재를 증명하지는 않습니다. 승인 스캔이 저하된 경우(공개 RPC가 무제한 로그 쿼리를 거부), 보고서는
warnings에 이를 명시합니다. 스캔이 부분적이었는데 사용자에게 승인이 깨끗하다고 말하지 마세요. - 재정적 조언을 하지 마세요. 데이터가 보여주는 것을 보고하세요. "이 포지션은 출구 시 가격 영향 85%"는 사실입니다. "이걸 팔아야 합니다"는 당신이 할 말이 아닙니다.
- 승인 철회는 사용자의 행동입니다. 어떤 승인이 위험한지 설명하고 revoke.cash 또는 관련 탐색기 링크를 제공할 수 있습니다. 절대 트랜잭션을 구성하거나 전송하지 마세요.
개인정보 보호
주소는 가명이지만 익명은 아닙니다. 사용자가 제공한 주소만 분석하세요. 같은 사람의 다른 주소를 찾거나 주소를 신원 정보 소스와 교차 참조하지 마세요.
더 자세한 내용
구체적인 질문이 있을 때만 다음을 로드하세요:
references/methodology.md— 비용 기준 추론, 샌드위치 탐지, 출구 유동성 시뮬레이션이 실제로 어떻게 작동하는지, 각각이 어디서 한계를 드러내는지references/interpreting-results.md— 보고서를 유용한 설명으로 전환하는 실제 예제와 피해야 할 일반적인 오독 사례