유형: 설계 (A 전체 역엔지니어링 기획 — B 재구현 청사진)
최종 업데이트: 2026-07-07 (manager 초안 · 감사/클릭맵 종합)
웹뷰: https://chat.punkpoll.com/doc/reverse-eng

펑크폴 역엔지니어링 기획문서 (A → B)

목적: www.punkpoll.com(A)의 프론트·백엔드·온체인·전체 파이프라인을 실측으로 역설계해, B가 A를 온전히 재구현할 청사진을 제공한다. 이 문서는 V3 준비작업(감사·측정모델·체크리스트)이 올바른 A 이해 위에 서 있는지 검증하는 기준선이다. 근거=전 페이지 클릭맵(/doc/parity-map)+모듈 감사(/doc/audit)+온체인 매핑(ONCHAIN_A_TO_B_REVERSE_ENGINEERING.md).


1. 시스템 개요 (A 전체 지형)

계층모듈역할
진입(메신저)kakaoChatBot(PHP·4채널)·punkpollBotAvax(텔레그램)사용자 진입·설문 발송·참여 수집
인증punkpoll-auth-gateway(NestJS)카카오/텔레그램 OAuth·JWT·nullifier 파생·ticket
코어 APIpunkpoll_api(Spring Boot)설문/채널/유저 CRUD·참여 수집·배포 workflow·콜백·admin
저장punkpoll-ipfs(Node·Pinata·BullMQ)참여 내용 IPFS(즉시 CID + 지연 핀 + 멱등)
온체인txSender + punkpollAvaxBlockChainApi(이원)·PunkpollFungibleTokenAvax(레거시 Mina·미사용)배포·참여기록·리워드·정산·토큰·콜백
운영punkpollUtil(panelManager)패널 관리·응답 스케줄
지갑standalone_wallet(Next 웹뷰)지갑 UI(A=비수탁·개인키 평문 결함)
프론트punkpoll_web(Next14) + app/admin사용자 웹(74 라우트) + 관리자 콘솔

2. 엔드투엔드 파이프라인 (설문 생성→참여→정산)


① 설문 생성: 사용자(채널 오너) → web 빌더(/builder/poll 5스텝) → punkpoll_api(설문 저장·배포요청 SysRequestService)
② 배포: punkpoll_api → 온체인 배포(txSender: SurveyNFT 컨트랙트 배포) + 알림톡/챗봇 발송(kakao/telegram)
③ 진입: 사용자 ← 카카오/텔레그램 챗봇 링크 → auth-gateway(OAuth·nullifier·ticket) → web(설문 상세)
④ 참여: web Vote 버튼 → sendMeJoinSurvey(챗봇 참여메시지) → 사용자 응답 → punkpoll_api 수집
       → 참여내용 ipfs(즉시 CID) + 온체인 참여기록(txSender: registerParticipation, 백엔드 대행서명)
⑤ 리워드/SBT: 참여당 리워드 토큰 전송 + receipt SBT 발행(txSender/chain)
⑥ 정산: 설문 종료 → settle(잉여 리워드 반환, deposit=지급+잉여 항등식)
⑦ 반영: 온체인 이벤트 → 콜백 → punkpoll_api → web/admin 실시간 표시

핵심 불변 semantics(G6·B 보존 필수):


3. 프론트엔드 역설계 (74 라우트)

전 페이지 클릭맵·요소단위 목적지 = /doc/parity-map (A-1~A-16). 요약:


4. 백엔드 모듈별 A→B 매핑 (구조 최적화)

A 모듈A 역할B 매핑(통폐합/최적화)
kakaoChatBot(PHP)+telegramBot메신저 진입·발송·수집(각 8599·2341줄 거대·SQL injection)공용 메신저 게이트웨이(어댑터): 카카오/텔레그램 어댑터 + 공용 핸들러. 파라미터 바인딩.
auth-gatewayOAuth·nullifier·ticket(키 하드코딩)OAuthStrategy 인터페이스·nullifier=resolveAUser 조회(키 미보유)·guards
punkpoll_api(Spring Boot)CRUD·배포·콜백·admin(SysRequest 1501·삼원화)CRUD는 B core-api가 대체(데드 제거)·배포/콜백/admin은 도메인 서비스 분리
ipfs즉시 CID·지연핀(멱등 갭)B pin-server(멱등 강화·입력검증)
txSender+blockchainApi(이원) [FungibleToken=레거시 Mina·미사용]온체인 TX 이원(~20파일·거대·병존). A현재=Avalanche C-Chain(Fuji 43113/mainnet 43114), PUNK=Avalanche ERC20(0x6023/0xE1Cb)B 단일 chain-worker(헥사고날 워커코어) + PUNK ERC20(0x804b). Avalanche→Avalanche. 합집합 동작 보존(4복구모드·멀티feePayer).
punkpollUtil패널 관리(1463 거대·SQL injection)패널 도메인 분리·파라미터 바인딩
standalone_wallet웹뷰 지갑(개인키 평문 결함)custodial 전환(서버생성+KEK)으로 결함 근본 제거
punkpoll_web + admin사용자 웹 + 관리자.tsx·폴링→store구독·거대컴포넌트 분리·중복 6클러스터→공용 훅(audit C1~C6). admin=web/app/admin 참조

B 구조 최적화 3대 축: ①메신저 게이트웨이 통합 ②온체인 단일 chain-worker(이원→단일) ③프론트 부채 제거(.tsx·훅·컴포넌트 분리).


5. 전 모듈 공통 부채 (V3 근본 제거 — 감사 §7)


6. V3 준비작업 적합성 자가점검 (jegwon 요구)

준비 산출물역엔지니어링 기획문서 적합성
전 페이지 클릭맵(parity-map)✅ §3 프론트 역설계의 실측 근거. A UI/UX 요소단위 목적지 확보
코드 감사(audit)✅ §4·§5 백엔드 매핑·공통부채의 file:line 근거
온체인 리버스엔지니어링(backend4)✅ §2 파이프라인 온체인 구간·§4 온체인 통폐합 근거
측정모델(G1~G6)✅ §2 불변 semantics = G6 기준선. G5 픽셀=§3 CSS 정확재현
기능별 체크리스트(A출처)🔧 이 문서 §4 매핑이 provenance 열의 출처. 체크리스트가 이 매핑을 기능단위로 분해
대시보드✅ 진행 가시화

결론(자가점검): V3 준비작업은 역엔지니어링 기획문서의 4개 축(파이프라인·프론트·백엔드매핑·불변semantics)을 모두 근거로 보유. 적합. 남은 것 = 이 매핑을 기능단위 체크리스트로 분해 + 측정모델 게이트 확정. 브레인스토밍에서 이 문서로 팀 상호 파악 검증.


7. 리스트럭처 결정 로그 (구조적 결정)

R1. FungibleToken(LightApi) 해체 (jegwon 2026-07-07 · manager 권고)

⑤ 온체인 토큰 마이그레이션 = 없음 (해소·team 소스검증)

R2. punkpollBotAvax 분리 (jegwon 2026-07-07 · 실코드 검증)

R3. punkpollSystemApi 해체 + '블록체인 처리' 교통정리 (jegwon 2026-07-07)