All projects

Case 04 / 04

OFT Bridge

LayerZero V2 OFT 경로 검증 · dry-run 브릿지

Role
개인 프로젝트
Stack
TypeScript · React · wagmi · Hono · Vitest · Playwright · Foundry
Links
OFT Bridge 개요: 출발·도착 네트워크, 지갑·RPC 상태, 토큰 CA로 브릿지 찾기 (목업 데이터)

Overview

Stargate 같은 프론트에 나오지 않는 OFT는 브릿지 컨트랙트 주소, peer 설정, DVN 구성, 수수료를 직접 확인해야 합니다. OFT Bridge는 토큰 CA에서 OFT/OFTAdapter를 찾고, 양쪽 체인 설정을 공식 배포 프로필과 대조한 뒤, 같은 블록에서 읽은 견적과 eth_call 시뮬레이션으로 수수료까지 계산합니다. 기본 실행은 테스트넷 + dry-run이고, 라이브 데모는 목업 체인 데이터로 전체 흐름을 재현하는 정적 빌드입니다.

Features

  • 탐색: 공식 메타데이터, 직접 입력, 과거 성공 거래(OFTSent·PacketDelivered·OFTReceived, GUID 재계산)를 근거로 OFT 찾기
  • 경로 검증: peers, Endpoint·ULN302 라이브러리, DVN 구성(Dead DVN 차단), Executor, enforced options를 고정 프로필과 대조
  • 견적·시뮬레이션: quoteOFT/quoteSend를 같은 블록에서 읽고 send를 eth_call로 시뮬레이션, OP Stack L1 데이터 비용 포함
  • 도착 추적: 출발 OFTSent, LayerZero Scan, 목적지 수령량을 대조하고 양쪽 finalized 블록까지 확인해야 완료
  • LayerZero V2 EVM 111개 체인 등록, 수수료 모델을 검토한 56개에서 전송 가능·55개는 조회 전용

Key decisions

서버는 서명하지 않는다

로컬 Hono 서버는 eth_call, eth_getLogs 등 16개 메서드만 허용하는 읽기 전용 JSON-RPC 프록시입니다. eth_sendRawTransaction, eth_sign*, wallet_*는 403으로 거부하고, 서명과 전파는 브라우저 지갑만 합니다.

고정 프로필 + 실시간 대조

프로토콜 주소는 LayerZero 공식 메타데이터에서 생성 스크립트로 고정하고, 실행 중 받은 메타데이터는 대조용으로만 씁니다. 메타데이터가 오염돼도 서명 대상이 바뀌지 않습니다.

Fail closed

출처가 다른 RPC 응답, 체인 ID 불일치, 모호한 Scan 결과, finalized 블록 해시 불일치, 알 수 없는 수수료 모델은 통과가 아니라 차단 또는 미확인으로 처리합니다.

정확히 한 번

견적은 60초 뒤 만료되고 서명 직전에 다시 시뮬레이션합니다. 한 번의 클릭은 검토한 요청과 바이트 단위로 같은 트랜잭션 하나만 보내며, 요청 전에 이력을 IndexedDB에 예약해 탭 간 중복 전송을 막습니다.

Security

  • 개인키·니모닉·키스토어를 읽는 코드가 없음 — 서명은 Rabby 지갑이 담당
  • 안전한 기본값: 테스트넷 + dry-run, 메인넷·실전송은 --mainnet·--live를 명시해야만 켜짐, 모호한 설정값은 시작 중단
  • 로컬 전용 서버: 127.0.0.1 바인딩, Host/Origin 허용 목록, sec-fetch-site 확인, 커스텀 헤더로 DNS rebinding·CSRF 차단
  • 정적 데모 CSP: default-src 'none', script-src 'self', connect-src 'self' — Playwright로 30초 관찰해 외부 요청·CSP 위반 0건
  • Vitest 321개: 루프백 외 fetch 차단, fixture는 공개 컨트랙트 주소 외 모든 값을 합성

07 — Contact

Let's
talk.

Email

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

GitHub

github.com/znan2