항해 기록
정적인 학습 서비스였던 widigg에 온체인 인증이라는 두 번째 돛을 올렸다. 백서 퀴즈를 모두 맞히면 학습 수료 배지를 실제 NFT로 발급한다.
- 컨트랙트:
WhitepaperBadge(ERC-721, OpenZeppelin) — Base 메인넷 배포, Basescan·Sourcify 이중 소스 검증. 배지 이미지(SVG)·메타데이터를 완전 온체인 저장 - 부정 발급 방지: 퀴즈 정답을 클라이언트에 노출하지 않고, 서버가 채점 후 EIP-712 바우처 서명을 발급 → 컨트랙트는 그 서명이 있어야만 민팅. "퀴즈를 안 풀고 민팅"이 원천 차단된다
- 지갑·저장소: MetaMask 연결, 발급 기록은 서버 전용 경로로만 Firestore에 기록(클라이언트 직접 쓰기 차단). 배지 공유용 OG 카드도 추가
- 부가 기능: 목표가 도달 시 브라우저 웹푸시로 알리는 가격 알림
- 출처: NFT 플랫폼 뼈대만 있던 다른 프로젝트(project-EF)의 지갑·Firebase 모듈을 이식해 재활용
판단
학습 서비스에 왜 NFT인가 — "수료했다"는 사실을 위·변조 불가능하게 증명하기 위해서다. 서버 DB의 기록은 우리가 마음대로 바꿀 수 있지만, 온체인 배지는 그렇지 않다. 다만 그 신뢰는 "아무나 민팅하면" 무너지므로, 서명 기반 서버 검증이 이 기능의 핵심이었다. 온체인(소유 증명)과 오프체인(빠른 조회·검증)의 역할을 나눠, 컨트랙트는 발급·소유만 맡고 채점·자격 판단은 서버가 맡는 구조로 정리했다.
가장 많은 시간을 쓴 건 코드가 아니라 무료 티어의 현실이었다. 가스비는 "교육 수료 비용" 명목으로 학습자가 부담하도록 설계하되 부담이 적은 Base(L2) 를 골랐고, 15분 주기 알림 체크는 Vercel 무료 크론이 "하루 1회"만 허용해 GitHub Actions로 우회했다. 배포가 조용히 실패하던 원인도 바로 이 크론 제약이었다 — 대시보드 필터에 가려진 실패를 걷어내고서야 보였다.
남은 항로
- 백서 콘텐츠 4종(Chainlink·Uniswap·Aave·Cosmos) 추가 — AI 생성 파이프라인 대기 중
- Sepolia 테스트넷 병행 운영 → 메인넷 안정화 관찰