All projects

Case 03 / 04

dexdda

DEX↔CEX 갭 계산기

Role
개인 프로젝트
Stack
Python · FastAPI · httpx · pydantic v2 · eth-account · Vanilla JS · pytest · Playwright
Links
dexdda 코인별 비교 표: 매수 체인·유동성, DEX 가격, 업비트·빗썸 갭, 입출금 상태 (합성 데이터)

Overview

업비트·빗썸 상장 종목을 29개 EVM 체인의 토큰과 연결하고, DEX에서 사서 국내 거래소에서 팔 때 실제로 얼마가 남는지를 계산합니다. 표면 갭만이 아니라 금액별 DEX 견적, 거래소 매수 호가 소진, 승인·스왑·전송 가스비, 입금망 상태까지 합친 실효갭을 보여 줍니다. 라이브 데모는 백엔드 없는 정적 빌드이고 합성 데이터로 동작합니다.

Features

  • 레지스트리: CoinGecko 코인 ID + 체인 + 컨트랙트를 정체성으로 삼아 상장 종목을 결정적으로 연결, 표시명 추측 없음
  • 표면 갭: 업비트 USDT 매도 1호가 기준 공통 환산으로 2초마다 갱신, 코인별 유동성 최대 체인을 대표로 표시
  • 실효갭: DEX 견적·호가 소진·가스비·입금망 상태·컨펌 수를 합쳐 "지금 실행하면 얼마 남는지" 계산
  • 확인 후 스왑: 서버가 만든 intent만 확인 가능, 기본값 DRY_RUN=true(서명·전송 0회)
  • 운영 보조: 입금 중단 탭, 갭 상한 초과 의심 목록, 코인·입금망 단위 숨김, 신규 상장 감지

Key decisions

읽기 요청은 외부 호출 없이

백그라운드 워커가 외부 API를 모아 메모리 스냅샷을 만들고, API 읽기 요청은 그 스냅샷만 돌려줍니다. 브라우저 폴링 횟수와 외부 API 호출 제한이 서로 무관해집니다.

금액은 Decimal·10진 문자열로만

호가 소진과 가스 환산에서 float 오차가 수익 판단을 뒤집지 않도록, 금액은 Decimal로 계산하고 JSON에도 문자열로 싣습니다.

실행은 서버 intent 기반

스왑 확인 API는 서버가 만든 intent ID만 받아 클라이언트가 calldata·금액·nonce를 바꿀 수 없습니다. tx hash와 nonce는 브로드캐스트 전에 원자적으로 기록하고 자동 재전송은 하지 않습니다. 실행은 비용 모델을 검증한 Ethereum·Polygon·Avalanche C로 제한합니다.

정적 데모도 실제 계산 경로

데모용 프런트엔드를 따로 만들지 않고, 실제 앱을 합성 provider로 실행해 응답을 캡처합니다. 데모 수치도 같은 갭·실효갭·DRY_RUN 가드를 통과합니다.

Security

  • 비밀값은 화이트리스트로 정제: 로그·진단·응답에 허용 필드만 싣고, 키·JWT·서명·RPC URL은 구조적으로 제외 — 테스트가 sentinel 누출을 검사
  • 로컬 전용 서버: 127.0.0.1 고정, TrustedHost 검사, 쓰기 요청에 세션 토큰, 같은 출처 Origin 검사, CORS 닫음
  • 운영 안내: 거래소 API 키는 입금 조회·주소 생성 권한만 주고 허용 IP를 등록하도록 권장
  • 정적 데모 CSP: default-src 'none', connect-src 'self', require-trusted-types-for 'script' — 30초 조작 중 외부 요청·CSP 위반 0건 검사
  • pytest 307개: 합성 fixture + httpx.MockTransport, 실제 API·.env 미사용

07 — Contact

Let's
talk.

Email

이메일 주소는 스팸 수집을 막기 위해 JavaScript로 표시합니다. GitHub로도 연락할 수 있습니다.

GitHub

github.com/znan2